spek_platform_config_dir()

This commit is contained in:
Alexander Kojevnikov 2012-08-06 22:55:30 -07:00
parent 92dd6a8bbf
commit 0c08e68c5f
3 changed files with 19 additions and 77 deletions

View File

@ -32,82 +32,6 @@
#include "spek-platform.h"
void spek_platform_init () {
#ifdef G_OS_DARWIN
g_object_new (GTK_TYPE_OSX_APPLICATION, NULL);
#endif
}
void spek_platform_fix_args (gchar **argv, gint argc) {
#ifdef G_OS_WIN32
/* Because MinGW does not support Unicode arguments we are going to
* get them using Windows API. In addition, GLib's option parser
* doesn't work well with utf-8 strings on Windows, converting
* them to URIs works around this problem.
*/
int i;
gchar *s, *t;
wchar_t **wargv;
int wargc;
wargv = CommandLineToArgvW (GetCommandLineW (), &wargc);
for (i = 0; i < argc; i++) {
s = g_utf16_to_utf8 (wargv[i], -1, NULL, NULL, NULL);
if (s) {
t = g_filename_to_uri (s, NULL, NULL);
g_free (s);
if (t) {
g_free (argv[i]);
argv[i] = t;
}
}
}
LocalFree (wargv);
#endif
}
#ifdef G_OS_DARWIN
static void accel_map_foreach (gpointer data, const gchar *accel_path, guint accel_key, GdkModifierType
accel_mods, gboolean changed)
{
if (accel_mods & GDK_CONTROL_MASK) {
accel_mods &= ~GDK_CONTROL_MASK;
accel_mods |= GDK_META_MASK;
gtk_accel_map_change_entry (accel_path, accel_key, accel_mods, FALSE);
}
}
#endif
void spek_platform_fix_ui (GtkUIManager *ui)
{
#ifdef G_OS_DARWIN
GtkOSXApplication *app = NULL;
GtkOSXApplicationMenuGroup *group = NULL;
GtkWidget *menubar = NULL;
GtkWidget *file_quit = NULL;
GtkWidget *edit_preferences = NULL;
GtkWidget *help_about = NULL;
app = g_object_new (GTK_TYPE_OSX_APPLICATION, NULL);
menubar = gtk_ui_manager_get_widget (ui, "/MenuBar");
file_quit = gtk_ui_manager_get_widget (ui, "/MenuBar/File/FileQuit");
edit_preferences = gtk_ui_manager_get_widget (ui, "/MenuBar/Edit/EditPreferences");
help_about = gtk_ui_manager_get_widget (ui, "/MenuBar/Help/HelpAbout");
gtk_widget_hide (menubar);
gtk_widget_hide (file_quit);
gtk_osxapplication_set_menu_bar (app, GTK_MENU_SHELL (menubar));
group = gtk_osxapplication_add_app_menu_group (app);
gtk_osxapplication_add_app_menu_item (app, group, GTK_MENU_ITEM (help_about));
group = gtk_osxapplication_add_app_menu_group (app);
gtk_osxapplication_add_app_menu_item (app, group, GTK_MENU_ITEM (edit_preferences));
gtk_accel_map_foreach (NULL, accel_map_foreach);
gtk_osxapplication_ready (app);
#endif
}
gchar *spek_platform_locale_dir () {
static gchar *locale_dir = NULL;

View File

@ -19,6 +19,8 @@
#include <cstring>
#include <wx/filename.h>
#include <wx/stdpaths.h>
#include <wx/utils.h>
#include "spek-platform.h"
@ -31,3 +33,15 @@ char * spek_platform_short_path(const char *path)
return NULL;
}
char * spek_platform_config_dir(const char *app_name)
{
#ifdef OS_WIN
wxFileName file_name(wxStandardPaths::Get().GetUserConfigDir());
#else
wxFileName file_name(wxGetHomeDir());
file_name.AppendDir(wxT(".config"));
#endif
file_name.AppendDir(wxString(app_name, wxConvUTF8));
file_name.SetFullName(wxT("preferences"));
return strdup(file_name.GetFullPath().char_str(wxConvUTF8));
}

View File

@ -24,7 +24,11 @@ extern "C" {
#endif
// Returns a 8.3 version of the UTF8-encoded path on Windows and NULL on other platforms.
char * spek_platform_short_path (const char *path);
char * spek_platform_short_path(const char *path);
// Not quite XDG-compatible, but close enough.
// TODO: implement XDG spec in wxWidgets.
char * spek_platform_config_dir(const char *app_name);
#ifdef __cplusplus
}