static void register_stock_icons (void) { GtkIconTheme *theme; theme = gtk_icon_theme_get_default (); gtk_icon_theme_prepend_search_path (theme, THEME_DIR); }
/* * This is needed when MN is not installed in the standard prefix (as * is the case for my test builds). */ static void ensure_icon_path (void) { static const char *icon_path = DATADIR G_DIR_SEPARATOR_S "icons"; if (! has_icon_path(icon_path)) gtk_icon_theme_prepend_search_path(gtk_icon_theme_get_default(), icon_path); }
int clip_GTK_ICONTHEMEPREPENDSEARCHPATH(ClipMachine * cm) { C_object *cicon = _fetch_co_arg(cm); gchar *path = _clip_parc(cm, 2); CHECKCOBJ(cicon, GTK_IS_ICON_THEME(cicon->object)); CHECKARG(2, CHARACTER_t); gtk_icon_theme_prepend_search_path(GTK_ICON_THEME(cicon->object), path); return 0; err: return 1; }
int main (int argc, char *argv[]) { GtkBuilder *builder; GObject *item; GtkWidget *dlg; int maj, min, sub; #ifdef ENABLE_NLS setlocale (LC_ALL, ""); bindtextdomain ( GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR ); bind_textdomain_codeset ( GETTEXT_PACKAGE, "UTF-8" ); textdomain ( GETTEXT_PACKAGE ); #endif // check to see if lxsession will auto-refresh - version 0.4.9 or later read_version ("lxsession", &maj, &min, &sub); if (min >= 5) needs_refresh = 0; else if (min == 4 && sub == 9) needs_refresh = 0; else needs_refresh = 1; // load data from config files check_themes (); load_lxsession_settings (); load_obpix_settings (); load_pcman_settings (); load_lxpanel_settings (); backup_values (); // GTK setup gtk_init (&argc, &argv); gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default(), PACKAGE_DATA_DIR); // build the UI builder = gtk_builder_new (); gtk_builder_add_from_file (builder, PACKAGE_DATA_DIR "/pipanel.ui", NULL); dlg = (GtkWidget *) gtk_builder_get_object (builder, "dialog1"); gtk_dialog_set_alternative_button_order (GTK_DIALOG (dlg), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); font = gtk_builder_get_object (builder, "fontbutton1"); gtk_font_button_set_font_name (GTK_FONT_BUTTON (font), desktop_font); g_signal_connect (font, "font-set", G_CALLBACK (on_desktop_font_set), NULL); dpic = gtk_builder_get_object (builder, "filechooserbutton1"); gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dpic), desktop_picture); g_signal_connect (dpic, "file-set", G_CALLBACK (on_desktop_picture_set), NULL); if (!strcmp (desktop_mode, "color")) gtk_widget_set_sensitive (GTK_WIDGET (dpic), FALSE); else gtk_widget_set_sensitive (GTK_WIDGET (dpic), TRUE); hcol = gtk_builder_get_object (builder, "colorbutton1"); gtk_color_button_set_color (GTK_COLOR_BUTTON (hcol), &theme_colour); g_signal_connect (hcol, "color-set", G_CALLBACK (on_theme_colour_set), NULL); dcol = gtk_builder_get_object (builder, "colorbutton2"); gtk_color_button_set_color (GTK_COLOR_BUTTON (dcol), &desktop_colour); g_signal_connect (dcol, "color-set", G_CALLBACK (on_desktop_colour_set), NULL); bcol = gtk_builder_get_object (builder, "colorbutton3"); gtk_color_button_set_color (GTK_COLOR_BUTTON (bcol), &bar_colour); g_signal_connect (bcol, "color-set", G_CALLBACK (on_bar_colour_set), NULL); btcol = gtk_builder_get_object (builder, "colorbutton4"); gtk_color_button_set_color (GTK_COLOR_BUTTON (btcol), &bartext_colour); g_signal_connect (btcol, "color-set", G_CALLBACK (on_bartext_colour_set), NULL); htcol = gtk_builder_get_object (builder, "colorbutton5"); gtk_color_button_set_color (GTK_COLOR_BUTTON (htcol), &themetext_colour); g_signal_connect (htcol, "color-set", G_CALLBACK (on_themetext_colour_set), NULL); dtcol = gtk_builder_get_object (builder, "colorbutton6"); gtk_color_button_set_color (GTK_COLOR_BUTTON (dtcol), &desktoptext_colour); g_signal_connect (dtcol, "color-set", G_CALLBACK (on_desktoptext_colour_set), NULL); dmod = gtk_builder_get_object (builder, "comboboxtext1"); if (!strcmp (desktop_mode, "center")) gtk_combo_box_set_active (GTK_COMBO_BOX (dmod), 1); else if (!strcmp (desktop_mode, "fit")) gtk_combo_box_set_active (GTK_COMBO_BOX (dmod), 2); else if (!strcmp (desktop_mode, "crop")) gtk_combo_box_set_active (GTK_COMBO_BOX (dmod), 3); else if (!strcmp (desktop_mode, "stretch")) gtk_combo_box_set_active (GTK_COMBO_BOX (dmod), 4); else if (!strcmp (desktop_mode, "tile")) gtk_combo_box_set_active (GTK_COMBO_BOX (dmod), 5); else gtk_combo_box_set_active (GTK_COMBO_BOX (dmod), 0); g_signal_connect (dmod, "changed", G_CALLBACK (on_desktop_mode_set), gtk_builder_get_object (builder, "filechooserbutton1")); item = gtk_builder_get_object (builder, "button3"); g_signal_connect (item, "clicked", G_CALLBACK (on_set_defaults), gtk_builder_get_object (builder, "button3")); rb1 = gtk_builder_get_object (builder, "radiobutton1"); g_signal_connect (rb1, "toggled", G_CALLBACK (on_bar_pos_set), NULL); rb2 = gtk_builder_get_object (builder, "radiobutton2"); g_signal_connect (rb2, "toggled", G_CALLBACK (on_bar_pos_set), NULL); if (barpos) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb2), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb1), TRUE); rb3 = gtk_builder_get_object (builder, "radiobutton3"); g_signal_connect (rb3, "toggled", G_CALLBACK (on_menu_size_set), NULL); rb4 = gtk_builder_get_object (builder, "radiobutton4"); g_signal_connect (rb4, "toggled", G_CALLBACK (on_menu_size_set), NULL); rb5 = gtk_builder_get_object (builder, "radiobutton5"); g_signal_connect (rb5, "toggled", G_CALLBACK (on_menu_size_set), NULL); if (icon_size <= 20) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb5), TRUE); else if (icon_size <= 28) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb4), TRUE); else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (rb3), TRUE); cb1 = gtk_builder_get_object (builder, "checkbutton1"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb1), show_docs); g_signal_connect (cb1, "toggled", G_CALLBACK (on_toggle_docs), NULL); cb2 = gtk_builder_get_object (builder, "checkbutton2"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb2), show_trash); g_signal_connect (cb2, "toggled", G_CALLBACK (on_toggle_trash), NULL); cb3 = gtk_builder_get_object (builder, "checkbutton3"); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb3), show_mnts); g_signal_connect (cb3, "toggled", G_CALLBACK (on_toggle_mnts), NULL); g_object_unref (builder); if (gtk_dialog_run (GTK_DIALOG (dlg)) == GTK_RESPONSE_CANCEL) { if (restore_values ()) { save_lxsession_settings (); save_pcman_settings (); save_obconf_settings (); save_obpix_settings (); save_gtk3_settings (); save_lxpanel_settings (); if (needs_refresh) system (RELOAD_LXSESSION); system (RELOAD_LXPANEL); system (RELOAD_OPENBOX); system (RELOAD_PCMANFM); } } else save_greeter_settings (); gtk_widget_destroy (dlg); return 0; }
int main(int argc, char** argv) { GtkBuilder* builder; char* str = NULL; GKeyFile* kf = g_key_file_new(); const char* session_name = g_getenv("DESKTOP_SESSION"); /* load settings from current session config files */ if(!session_name) session_name = "LXDE"; char* rel_path = g_strconcat("lxsession/", session_name, "/desktop.conf", NULL); char* user_config_file = g_build_filename(g_get_user_config_dir(), rel_path, NULL); #ifdef ENABLE_NLS bindtextdomain ( GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR ); bind_textdomain_codeset ( GETTEXT_PACKAGE, "UTF-8" ); textdomain ( GETTEXT_PACKAGE ); #endif gtk_init(&argc, &argv); gtk_icon_theme_prepend_search_path(gtk_icon_theme_get_default(), PACKAGE_DATA_DIR); /* build the UI */ builder = gtk_builder_new(); gtk_builder_add_from_file( builder, PACKAGE_DATA_DIR "/lxinput.ui", NULL ); dlg = (GtkWidget*)gtk_builder_get_object( builder, "dlg" ); gtk_dialog_set_alternative_button_order( (GtkDialog*)dlg, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1 ); mouse_accel = (GtkRange*)gtk_builder_get_object(builder,"mouse_accel"); mouse_threshold = (GtkRange*)gtk_builder_get_object(builder,"mouse_threshold"); mouse_left_handed = (GtkToggleButton*)gtk_builder_get_object(builder,"left_handed"); mouse_dclick = (GtkRange*)gtk_builder_get_object(builder, "mouse_dclick"); kb_delay = (GtkRange*)gtk_builder_get_object(builder,"kb_delay"); kb_interval = (GtkRange*)gtk_builder_get_object(builder,"kb_interval"); kb_beep = (GtkToggleButton*)gtk_builder_get_object(builder,"beep"); kb_layout = (GtkButton*)gtk_builder_get_object(builder,"keyboard_layout"); const gchar *program = detect_keymap_program(); if (program == NULL) { /* Hide the button if there is no program to set keymap */ kb_layout_label = (GtkLabel*)gtk_builder_get_object(builder,"keyboard_layout_label"); gtk_widget_set_visible(GTK_WIDGET(kb_layout_label), FALSE); gtk_widget_set_visible(GTK_WIDGET(kb_layout), FALSE); } else { gtk_button_set_label(kb_layout, _("Keyboard Layout...")); } g_object_unref( builder ); /* read the config flie */ load_settings(); /* init the UI */ gtk_range_set_value(mouse_accel, (gdouble)accel / 10.0); gtk_range_set_value(mouse_threshold, threshold); gtk_range_set_value(mouse_dclick, dclick); gtk_toggle_button_set_active(mouse_left_handed, left_handed); gtk_range_set_value(kb_delay, delay); gtk_range_set_value(kb_interval, interval); gtk_toggle_button_set_active(kb_beep, beep); set_range_stops(mouse_accel, 10); g_signal_connect(mouse_accel, "value-changed", G_CALLBACK(on_mouse_accel_changed), NULL); set_range_stops(mouse_threshold, 10); g_signal_connect(mouse_threshold, "value-changed", G_CALLBACK(on_mouse_threshold_changed), NULL); g_signal_connect(mouse_left_handed, "toggled", G_CALLBACK(on_left_handed_toggle), NULL); g_signal_connect(mouse_dclick, "value-changed", G_CALLBACK(on_mouse_dclick_changed), NULL); set_range_stops(kb_delay, 10); g_signal_connect(kb_delay, "value-changed", G_CALLBACK(on_kb_range_changed), &delay); set_range_stops(kb_interval, 10); g_signal_connect(kb_interval, "value-changed", G_CALLBACK(on_kb_range_changed), &interval); g_signal_connect(kb_beep, "toggled", G_CALLBACK(on_kb_beep_toggle), NULL); g_signal_connect(kb_layout, "clicked", G_CALLBACK(on_kb_layout_clicked), NULL); if( gtk_dialog_run( (GtkDialog*)dlg ) == GTK_RESPONSE_OK ) { gsize len; if(!g_key_file_load_from_file(kf, user_config_file, G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, NULL)) { /* the user config file doesn't exist, create its parent dir */ len = strlen(user_config_file) - strlen("/desktop.conf"); user_config_file[len] = '\0'; g_debug("user_config_file = %s", user_config_file); g_mkdir_with_parents(user_config_file, 0700); user_config_file[len] = '/'; g_key_file_load_from_dirs(kf, rel_path, (const char**)g_get_system_config_dirs(), NULL, G_KEY_FILE_KEEP_COMMENTS|G_KEY_FILE_KEEP_TRANSLATIONS, NULL); } g_free(rel_path); g_key_file_set_integer(kf, "Mouse", "AccFactor", accel); g_key_file_set_integer(kf, "Mouse", "AccThreshold", threshold); g_key_file_set_integer(kf, "Mouse", "LeftHanded", !!left_handed); g_key_file_set_integer(kf, "Keyboard", "Delay", delay); g_key_file_set_integer(kf, "Keyboard", "Interval", interval); g_key_file_set_integer(kf, "Keyboard", "Beep", !!beep); str = g_key_file_to_data(kf, &len, NULL); g_file_set_contents(user_config_file, str, len, NULL); g_free(str); /* ask the settigns daemon to reload */ /* FIXME: is this needed? */ /* g_spawn_command_line_sync("lxde-settings-daemon reload", NULL, NULL, NULL, NULL); */ /* also save settings into autostart file for non-lxsession sessions */ g_free(user_config_file); rel_path = g_build_filename(g_get_user_config_dir(), "autostart", NULL); user_config_file = g_build_filename(rel_path, "LXinput-setup.desktop", NULL); if (g_mkdir_with_parents(rel_path, 0755) == 0) { str = g_strdup_printf("[Desktop Entry]\n" "Type=Application\n" "Name=%s\n" "Comment=%s\n" "NoDisplay=true\n" "Exec=sh -c 'xset m %d/10 %d r rate %d %d b %s'\n" "NotShowIn=GNOME;KDE;XFCE;\n", _("LXInput autostart"), _("Setup keyboard and mouse using settings done in LXInput"), /* FIXME: how to setup left-handed mouse? */ accel, threshold, delay, interval, beep ? "on" : "off"); g_file_set_contents(user_config_file, str, -1, NULL); g_free(str); } } else { /* restore to original settings */ /* keyboard */ delay = old_delay; interval = old_interval; beep = old_beep; XkbSetAutoRepeatRate(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), XkbUseCoreKbd, delay, interval); /* FIXME: beep? */ /* mouse */ accel = old_accel; threshold = old_threshold; left_handed = old_left_handed; XChangePointerControl(GDK_DISPLAY_XDISPLAY(gdk_display_get_default()), True, True, accel, 10, threshold); set_left_handed_mouse(); set_dclick_time (old_dclick); } gtk_widget_destroy( dlg ); g_free( file ); g_key_file_free( kf ); g_free(user_config_file); return 0; }
int main (int argc, char **argv) { GtkWidget *window = NULL; GError *error = NULL; GOptionContext *context; char *dir, *description; int result = EXIT_SUCCESS; bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); setlocale (LC_ALL, ""); g_thread_init (NULL); gdk_threads_init (); gdk_threads_enter (); context = g_option_context_new (NULL); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE); g_option_context_add_group (context, gtk_get_option_group (TRUE)); description = g_strdup_printf (_("Report errors (in English, with LC_ALL=C) to <%s>."), PACKAGE_BUGREPORT); g_option_context_set_summary (context, N_("Giggle is a graphical frontend for the git content tracker.")); g_option_context_set_description (context, description); g_free (description); if (!g_option_context_parse (context, &argc, &argv, &error)) { gchar *the_basename = g_filename_display_basename (argv[0]); g_printerr ("%s: %s\n", the_basename, error->message); g_printerr (_("Try `%s --help' for more information.\n"), the_basename); result = EXIT_FAILURE; g_free (the_basename); goto end; } /* Freing memory */ g_option_context_free (context); gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (), ICONDIR); if (g_file_test ("pixmaps", G_FILE_TEST_IS_DIR)) gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (), "pixmaps"); if (version) { g_print ("%s %s, " "Copyright (C) 2007-2008 Imendio AB, " "Copyright (C) 2008 Mathias Hasselmann\n", PACKAGE_NAME, PACKAGE_VERSION); goto end; } gtk_window_set_default_icon_name (PACKAGE); g_set_application_name ("Giggle"); window = giggle_window_new (); /* Set dir to: - the first remaining arg, or - the value of GIT_DIR, or - the current working dir */ if (dirs && *dirs) { dir = g_strdup (*dirs); g_strfreev (dirs); } else { dir = g_strdup (g_getenv ("GIT_DIR")); if (dir == NULL) { dir = g_get_current_dir (); } } g_unsetenv ("GIT_DIR"); if (clone_uri) { GtkWidget *clone_dialog; GtkResponseType response; gchar *clone_dir; clone_dir = g_strdup (dir); clone_dialog = giggle_clone_dialog_new (clone_uri, clone_dir); g_free (clone_dir); response = gtk_dialog_run (GTK_DIALOG (clone_dialog)); if (response == GTK_RESPONSE_ACCEPT) { /* replace dir with the the newly cloned repo's one */ g_free (dir); dir = g_strdup (giggle_clone_dialog_get_directory (GIGGLE_CLONE_DIALOG (clone_dialog))); } gtk_widget_destroy (clone_dialog); } if (giggle_git_test_dir (dir)) { giggle_window_set_directory (GIGGLE_WINDOW (window), dir); } else { gtk_widget_show (window); } g_free (dir); /* window will show itself when it reads its initial size configuration */ if (diff_window) giggle_window_show_diff_window (GIGGLE_WINDOW (window)); gtk_main (); end: if (window) gtk_widget_destroy (window); gdk_threads_leave (); return result; }
static VALUE it_prepend_search_path(VALUE self, VALUE path) { gtk_icon_theme_prepend_search_path(_SELF(self), RVAL2CSTR(path)); return self; }
PoeditArtProvider::PoeditArtProvider() { #ifdef __WXGTK3__ gtk_icon_theme_prepend_search_path(gtk_icon_theme_get_default(), GetIconsDir().fn_str()); #endif }
int main (int argc, char **argv) { GtkWidget *window = NULL; GError *error = NULL; GOptionContext *context; char *dir, *description; int result = EXIT_SUCCESS; bindtextdomain (GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); setlocale (LC_ALL, ""); g_thread_init (NULL); gdk_threads_init (); gdk_threads_enter (); context = g_option_context_new (N_("[DIRECTORY]")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE); g_option_context_add_group (context, gtk_get_option_group (TRUE)); description = g_strdup_printf (_("Report errors (in English, with LC_ALL=C) to <%s>."), PACKAGE_BUGREPORT); g_option_context_set_summary (context, N_("Giggle is a graphical frontend for the git content tracker.")); g_option_context_set_description (context, description); g_free (description); if (!g_option_context_parse (context, &argc, &argv, &error)) { char *basename = g_filename_display_basename (argv[0]); g_printerr ("%s: %s\n", basename, error->message); g_printerr (_("Try `%s --help' for more information.\n"), basename); result = EXIT_FAILURE; g_free (basename); goto end; } gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (), ICONDIR); if (g_file_test ("pixmaps", G_FILE_TEST_IS_DIR)) gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (), "pixmaps"); if (version) { g_print ("%s %s, " "Copyright (C) 2007-2008 Imendio AB, " "Copyright (C) 2008 Mathias Hasselmann\n", PACKAGE_NAME, PACKAGE_VERSION); goto end; } gtk_window_set_default_icon_name (PACKAGE); g_set_application_name ("Giggle"); window = giggle_window_new (); /* parse GIT_DIR into dir and unset it; if empty use the current_wd */ dir = g_strdup (g_getenv ("GIT_DIR")); if (!dir || !*dir) { g_free (dir); if (argc > 1 && *argv[1]) { dir = g_strdup (argv[1]); } else { dir = g_get_current_dir (); } } g_unsetenv ("GIT_DIR"); if (giggle_git_test_dir (dir)) { giggle_window_set_directory (GIGGLE_WINDOW (window), dir); } else { gtk_widget_show (window); } g_free (dir); /* window will show itself when it reads its initial size configuration */ if (diff_window) giggle_window_show_diff_window (GIGGLE_WINDOW (window)); gtk_main (); end: if (window) gtk_widget_destroy (window); gdk_threads_leave (); return result; }
/** * gimp_icons_init: * * Initializes the GIMP stock icon factory. * * You don't need to call this function as gimp_ui_init() already does * this for you. */ void gimp_icons_init (void) { static gboolean initialized = FALSE; GtkSettings *settings; GdkPixbuf *pixbuf; GError *error = NULL; gchar *icons_dir; gchar *system_icon_theme; gchar *gimp_icon_theme; gint i; if (initialized) return; gimp_stock_factory = gtk_icon_factory_new (); for (i = 0; i < G_N_ELEMENTS (gimp_stock_items); i++) { register_stock_icon (gimp_stock_factory, gimp_stock_items[i].stock_id, gimp_stock_items[i].stock_id); } register_bidi_stock_icon (gimp_stock_factory, GIMP_STOCK_MENU_LEFT, GIMP_STOCK_MENU_LEFT, GIMP_STOCK_MENU_RIGHT); register_bidi_stock_icon (gimp_stock_factory, GIMP_STOCK_MENU_RIGHT, GIMP_STOCK_MENU_RIGHT, GIMP_STOCK_MENU_LEFT); register_stock_icon (gimp_stock_factory, "gimp-indexed-palette", GIMP_STOCK_COLORMAP); register_stock_icon (gimp_stock_factory, "gimp-qmask-off", GIMP_STOCK_QUICK_MASK_OFF); register_stock_icon (gimp_stock_factory, "gimp-qmask-on", GIMP_STOCK_QUICK_MASK_ON); gtk_icon_factory_add_default (gimp_stock_factory); gtk_stock_add_static (gimp_stock_items, G_N_ELEMENTS (gimp_stock_items)); gtk_stock_add_static (gimp_compat_stock_items, G_N_ELEMENTS (gimp_compat_stock_items)); /* always prepend the default icon theme, it's never removed from * the path again and acts as fallback for missing icons in other * themes. */ if (! default_search_path) default_search_path = gimp_data_directory_file ("icons", NULL); icons_dir = g_file_get_path (default_search_path); gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (), icons_dir); g_free (icons_dir); /* if an icon theme was chosen before init(), change to it */ if (icon_theme_path) { GFile *search_path = g_file_get_parent (icon_theme_path); if (!g_file_equal (search_path, default_search_path)) { gchar *icon_dir = g_file_get_path (search_path); gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (), icon_dir); g_free (icon_dir); } g_object_unref (search_path); gimp_icon_theme = g_file_get_basename (icon_theme_path); } else { gimp_icon_theme = g_strdup (GIMP_DEFAULT_ICON_THEME); } settings = gtk_settings_get_for_screen (gdk_screen_get_default ()); g_object_get (settings, "gtk-icon-theme-name", &system_icon_theme, NULL); g_object_set (settings, "gtk-fallback-icon-theme", system_icon_theme, "gtk-icon-theme-name", gimp_icon_theme, NULL); g_free (gimp_icon_theme); g_free (system_icon_theme); g_signal_connect (settings, "notify::gtk-icon-theme-name", G_CALLBACK (gimp_icons_notify_system_icon_theme), NULL); pixbuf = gdk_pixbuf_new_from_resource ("/org/gimp/icons/64/gimp-wilber-eek.png", &error); if (pixbuf) { gtk_icon_theme_add_builtin_icon (GIMP_STOCK_WILBER_EEK, 64, pixbuf); g_object_unref (pixbuf); } else { g_critical ("Failed to create icon image: %s", error->message); g_clear_error (&error); } initialized = TRUE; }
static void gimp_icons_change_icon_theme (GFile *new_search_path) { GFile *old_search_path = g_file_get_parent (icon_theme_path); if (! default_search_path) default_search_path = gimp_data_directory_file ("icons", NULL); if (! g_file_equal (new_search_path, old_search_path)) { GtkIconTheme *icon_theme = gtk_icon_theme_get_default (); if (g_file_equal (old_search_path, default_search_path)) { /* if the old icon theme is in the default search path, * simply prepend the new theme's path */ gchar *path_str = g_file_get_path (new_search_path); gtk_icon_theme_prepend_search_path (icon_theme, path_str); g_free (path_str); } else { /* if the old theme is not in the default search path, * we need to deal with the search path's first element */ gchar **paths; gint n_paths; gtk_icon_theme_get_search_path (icon_theme, &paths, &n_paths); if (g_file_equal (new_search_path, default_search_path)) { /* when switching to a theme in the default path, remove * the first search path element, the default search path * is still in the search path */ gtk_icon_theme_set_search_path (icon_theme, (const gchar **) paths + 1, n_paths - 1); } else { /* when switching between two non-default search paths, replace * the first element of the search path with the new * theme's path */ g_free (paths[0]); paths[0] = g_file_get_path (new_search_path); gtk_icon_theme_set_search_path (icon_theme, (const gchar **) paths, n_paths); } g_strfreev (paths); } } g_object_unref (old_search_path); }
static void gimp_init_icon_theme_for_testing (void) { const gchar *top_srcdir = g_getenv ("GIMP_TESTING_ABS_TOP_SRCDIR"); gchar *icon_root; gchar *link_name; gchar *link_target; gint i; static const gchar *sizes[] = { "12x12", "16x16", "18x18", "20x20", "22x22", "24x24", "32x32", "48x48", "64x64" }; if (! top_srcdir) { g_printerr ("*\n" "* The env var GIMP_TESTING_ABS_TOP_SRCDIR is not set,\n" "* you are probably running in a debugger.\n" "* Set it manually, e.g.:\n" "*\n" "* set env GIMP_TESTING_ABS_TOP_SRCDIR=%s/source/gimp\n" "*\n", g_get_home_dir ()); return; } icon_root = g_dir_make_tmp ("gimp-test-icon-theme-XXXXXX", NULL); if (! icon_root) return; for (i = 0; i < G_N_ELEMENTS (sizes); i++) { gchar *icon_dir; icon_dir = g_build_filename (icon_root, "hicolor", sizes[i], NULL); g_mkdir_with_parents (icon_dir, 0700); link_name = g_build_filename (icon_dir, "apps", NULL); link_target = g_build_filename (top_srcdir, "icons", sizes[i] + 3, NULL); symlink (link_target, link_name); g_free (link_target); g_free (link_name); g_free (icon_dir); } link_name = g_build_filename (icon_root, "hicolor", "index.theme", NULL); link_target = g_build_filename (top_srcdir, "icons", "index.theme", NULL); symlink (link_target, link_name); g_free (link_target); g_free (link_name); gtk_icon_theme_prepend_search_path (gtk_icon_theme_get_default (), icon_root); g_free (icon_root); }