diff options
Diffstat (limited to 'driver/demo-Gtk.c')
-rw-r--r-- | driver/demo-Gtk.c | 201 |
1 files changed, 101 insertions, 100 deletions
diff --git a/driver/demo-Gtk.c b/driver/demo-Gtk.c index da98c53..c938ef2 100644 --- a/driver/demo-Gtk.c +++ b/driver/demo-Gtk.c @@ -82,6 +82,15 @@ # include <X11/extensions/Xinerama.h> #endif /* HAVE_XINERAMA */ +#if (__GNUC__ >= 4) /* Ignore useless warnings generated by gtk.h */ +# undef inline +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wstrict-prototypes" +# pragma GCC diagnostic ignored "-Wlong-long" +# pragma GCC diagnostic ignored "-Wvariadic-macros" +# pragma GCC diagnostic ignored "-Wpedantic" +#endif + #include <gtk/gtk.h> #ifdef HAVE_CRAPPLET @@ -92,25 +101,20 @@ #include <gdk/gdkx.h> #ifdef HAVE_GTK2 -# include <glade/glade-xml.h> # include <gmodule.h> #else /* !HAVE_GTK2 */ # define G_MODULE_EXPORT /**/ #endif /* !HAVE_GTK2 */ -#if defined(DEFAULT_ICONDIR) && !defined(GLADE_DIR) -# define GLADE_DIR DEFAULT_ICONDIR -#endif -#if !defined(DEFAULT_ICONDIR) && defined(GLADE_DIR) -# define DEFAULT_ICONDIR GLADE_DIR -#endif - #ifndef HAVE_XML /* Kludge: this is defined in demo-Gtk-conf.c when HAVE_XML. It is unused otherwise, so in that case, stub it out. */ static const char *hack_configuration_path = 0; #endif +#if (__GNUC__ >= 4) +# pragma GCC diagnostic pop +#endif #include "version.h" @@ -208,7 +212,7 @@ typedef struct { conf_data *cdata; /* private data for per-hack configuration */ #ifdef HAVE_GTK2 - GladeXML *glade_ui; /* Glade UI file */ + GtkBuilder *gtk_ui; /* UI file */ #endif /* HAVE_GTK2 */ Bool debug_p; /* whether to print diagnostics */ @@ -272,16 +276,15 @@ static void kill_preview_subproc (state *, Bool reset_p); static void schedule_preview_check (state *); -/* Prototypes of functions used by the Glade-generated code, - to avoid warnings. +/* Prototypes of functions used by the Gtk-generated code, to avoid warnings. */ -void exit_menu_cb (GtkMenuItem *, gpointer user_data); -void about_menu_cb (GtkMenuItem *, gpointer user_data); -void doc_menu_cb (GtkMenuItem *, gpointer user_data); -void file_menu_cb (GtkMenuItem *, gpointer user_data); -void activate_menu_cb (GtkMenuItem *, gpointer user_data); -void lock_menu_cb (GtkMenuItem *, gpointer user_data); -void kill_menu_cb (GtkMenuItem *, gpointer user_data); +void exit_menu_cb (GtkAction *, gpointer user_data); +void about_menu_cb (GtkAction *, gpointer user_data); +void doc_menu_cb (GtkAction *, gpointer user_data); +void file_menu_cb (GtkAction *, gpointer user_data); +void activate_menu_cb (GtkAction *, gpointer user_data); +void lock_menu_cb (GtkAction *, gpointer user_data); +void kill_menu_cb (GtkAction *, gpointer user_data); void restart_menu_cb (GtkWidget *, gpointer user_data); void run_this_cb (GtkButton *, gpointer user_data); void manual_cb (GtkButton *, gpointer user_data); @@ -339,38 +342,49 @@ name_to_widget (state *s, const char *name) if (!*name) abort(); #ifdef HAVE_GTK2 - if (!s->glade_ui) + if (!s->gtk_ui) { - /* First try to load the Glade file from the current directory; + /* First try to load the UI file from the current directory; if there isn't one there, check the installed directory. */ -# define GLADE_FILE_NAME "xscreensaver-demo.glade2" - const char * const files[] = { GLADE_FILE_NAME, - GLADE_DIR "/" GLADE_FILE_NAME }; +# define UI_FILE "xscreensaver-demo.ui" + const char * const files[] = { UI_FILE, + DEFAULT_ICONDIR "/" UI_FILE }; int i; + + s->gtk_ui = gtk_builder_new (); + for (i = 0; i < countof (files); i++) { struct stat st; if (!stat (files[i], &st)) { - s->glade_ui = glade_xml_new (files[i], NULL, NULL); - break; + GError* error = NULL; + + if (gtk_builder_add_from_file (s->gtk_ui, files[i], &error)) + break; + else + { + g_warning ("Couldn't load builder file %s: %s", + files[i], error->message); + g_error_free (error); + } } } - if (!s->glade_ui) + if (i >= countof (files)) { fprintf (stderr, - "%s: could not load \"" GLADE_FILE_NAME "\"\n" - "\tfrom " GLADE_DIR "/ or current directory.\n", + "%s: could not load \"" UI_FILE "\"\n" + "\tfrom " DEFAULT_ICONDIR "/ or current directory.\n", blurb()); exit (-1); } -# undef GLADE_FILE_NAME +# undef UI_FILE - glade_xml_signal_autoconnect (s->glade_ui); + gtk_builder_connect_signals (s->gtk_ui, NULL); } - w = glade_xml_get_widget (s->glade_ui, name); + w = GTK_WIDGET (gtk_builder_get_object (s->gtk_ui, name)); #else /* !HAVE_GTK2 */ @@ -382,7 +396,7 @@ name_to_widget (state *s, const char *name) #endif /* HAVE_GTK2 */ if (w) return w; - fprintf (stderr, "%s: no widget \"%s\" (wrong Glade file?)\n", + fprintf (stderr, "%s: no widget \"%s\" (wrong UI file?)\n", blurb(), name); abort(); } @@ -774,12 +788,12 @@ run_hack (state *s, int list_elt, Bool report_errors_p) /* Button callbacks According to Eric Lassauge, this G_MODULE_EXPORT crud is needed to make - libglade work on Cygwin; apparently all Glade callbacks need this magic - extra declaration. I do not pretend to understand. + GTK work on Cygwin; apparently all GTK callbacks need this magic extra + declaration. I do not pretend to understand. */ G_MODULE_EXPORT void -exit_menu_cb (GtkMenuItem *menuitem, gpointer user_data) +exit_menu_cb (GtkAction *menu_action, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ flush_dialog_changes_and_save (s); @@ -798,7 +812,7 @@ wm_toplevel_close_cb (GtkWidget *widget, GdkEvent *event, gpointer data) G_MODULE_EXPORT void -about_menu_cb (GtkMenuItem *menuitem, gpointer user_data) +about_menu_cb (GtkAction *menu_action, gpointer user_data) { char msg [2048]; char *vers = strdup (screensaver_id + 4); @@ -819,7 +833,7 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data) /* Ole Laursen <olau@hardworking.dk> says "don't use _() here because non-ASCII characters aren't allowed in localizable string keys." - (I don't want to just use (c) instead of © because that doesn't + (I don't want to just use (c) instead of © because that doesn't look as good in the plain-old default Latin1 "C" locale.) */ #ifdef HAVE_GTK2 @@ -851,7 +865,8 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data) GtkWidget *dialog = gtk_dialog_new (); GtkWidget *hbox, *icon, *vbox, *label1, *label2, *hb, *ok; - GtkWidget *parent = GTK_WIDGET (menuitem); + GSList *proxies = gtk_action_get_proxies (menu_action); + GtkWidget *parent = GTK_WIDGET (proxies->data); while (GET_PARENT (parent)) parent = GET_PARENT (parent); @@ -932,7 +947,7 @@ about_menu_cb (GtkMenuItem *menuitem, gpointer user_data) G_MODULE_EXPORT void -doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data) +doc_menu_cb (GtkAction *menu_action, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ saver_preferences *p = &s->prefs; @@ -960,7 +975,7 @@ doc_menu_cb (GtkMenuItem *menuitem, gpointer user_data) G_MODULE_EXPORT void -file_menu_cb (GtkMenuItem *menuitem, gpointer user_data) +file_menu_cb (GtkAction *menu_action, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ sensitize_menu_items (s, False); @@ -968,7 +983,7 @@ file_menu_cb (GtkMenuItem *menuitem, gpointer user_data) G_MODULE_EXPORT void -activate_menu_cb (GtkMenuItem *menuitem, gpointer user_data) +activate_menu_cb (GtkAction *menu_action, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_ACTIVATE, 0); @@ -976,7 +991,7 @@ activate_menu_cb (GtkMenuItem *menuitem, gpointer user_data) G_MODULE_EXPORT void -lock_menu_cb (GtkMenuItem *menuitem, gpointer user_data) +lock_menu_cb (GtkAction *menu_action, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_LOCK, 0); @@ -984,7 +999,7 @@ lock_menu_cb (GtkMenuItem *menuitem, gpointer user_data) G_MODULE_EXPORT void -kill_menu_cb (GtkMenuItem *menuitem, gpointer user_data) +kill_menu_cb (GtkAction *menu_action, gpointer user_data) { state *s = global_state_kludge; /* I hate C so much... */ run_cmd (s, XA_EXIT, 0); @@ -1191,7 +1206,7 @@ force_list_select_item (state *s, GtkWidget *list, int list_elt, Bool scroll_p) if (!was) gtk_widget_set_sensitive (parent, True); #ifdef HAVE_GTK2 model = gtk_tree_view_get_model (GTK_TREE_VIEW (list)); - g_assert (model); + if (!model) abort(); if (gtk_tree_model_iter_nth_child (model, &iter, NULL, list_elt)) { selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list)); @@ -1634,11 +1649,8 @@ flush_dialog_changes_and_save (state *s) /* Map the mode menu to `saver_mode' enum values. */ { - GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); - GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt)); - GtkWidget *selected = gtk_menu_get_active (menu); - GList *kids = gtk_container_children (GTK_CONTAINER (menu)); - int menu_elt = g_list_index (kids, (gpointer) selected); + GtkComboBox *opt = GTK_COMBO_BOX (name_to_widget (s, "mode_menu")); + int menu_elt = gtk_combo_box_get_active (opt); if (menu_elt < 0 || menu_elt >= countof(mode_menu_order)) abort(); p2->mode = mode_menu_order[menu_elt]; } @@ -1744,9 +1756,10 @@ flush_popup_changes_and_save (state *s) int list_elt = selected_list_element (s); GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text")); - GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo")); + GtkComboBoxEntry *vis = GTK_COMBO_BOX_ENTRY (name_to_widget (s, "visual_combo")); + GtkEntry *visent = GTK_ENTRY (gtk_bin_get_child (GTK_BIN (vis))); - const char *visual = gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (vis)->entry)); + const char *visual = gtk_entry_get_text (visent); const char *command = gtk_entry_get_text (cmd); char c; @@ -1791,7 +1804,7 @@ flush_popup_changes_and_save (state *s) { gdk_beep (); /* unparsable */ visual = ""; - gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), _("Any")); + gtk_entry_set_text (visent, _("Any")); } changed = flush_changes (s, list_elt, -1, command, visual); @@ -1839,21 +1852,8 @@ mode_menu_item_cb (GtkWidget *widget, gpointer user_data) GtkWidget *list = name_to_widget (s, "list"); int list_elt; - GList *menu_items = - gtk_container_children (GTK_CONTAINER (GET_PARENT (widget))); - int menu_index = 0; - saver_mode new_mode; - - while (menu_items) - { - if (menu_items->data == widget) - break; - menu_index++; - menu_items = menu_items->next; - } - if (!menu_items) abort(); - - new_mode = mode_menu_order[menu_index]; + int menu_index = gtk_combo_box_get_active (GTK_COMBO_BOX (widget)); + saver_mode new_mode = mode_menu_order[menu_index]; /* Keep the same list element displayed as before; except if we're switching *to* "one screensaver" mode from any other mode, set @@ -1901,7 +1901,7 @@ list_activated_cb (GtkTreeView *list, char *str; int list_elt; - g_return_if_fail (!gdk_pointer_is_grabbed ()); + if (gdk_pointer_is_grabbed()) return; str = gtk_tree_path_to_string (path); list_elt = strtol (str, NULL, 10); @@ -2868,13 +2868,13 @@ populate_prefs_page (state *s) /* Map the `saver_mode' enum to mode menu to values. */ { - GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); + GtkComboBox *opt = GTK_COMBO_BOX (name_to_widget (s, "mode_menu")); int i; for (i = 0; i < countof(mode_menu_order); i++) if (mode_menu_order[i] == p->mode) break; - gtk_option_menu_set_history (opt, i); + gtk_combo_box_set_active (opt, i); update_list_sensitivity (s); } @@ -3022,7 +3022,7 @@ sensitize_menu_items (state *s, Bool force_p) static Bool running_p = False; static time_t last_checked = 0; time_t now = time ((time_t *) 0); - const char *names[] = { "activate_menu", "lock_menu", "kill_menu", + const char *names[] = { "activate_action", "lock_action", "kill_action", /* "demo" */ }; int i; @@ -3034,8 +3034,8 @@ sensitize_menu_items (state *s, Bool force_p) for (i = 0; i < countof(names); i++) { - GtkWidget *w = name_to_widget (s, names[i]); - gtk_widget_set_sensitive (GTK_WIDGET(w), running_p); + GtkAction *a = GTK_ACTION (gtk_builder_get_object (s->gtk_ui, names[i])); + gtk_action_set_sensitive (a, running_p); } } @@ -3107,7 +3107,7 @@ fix_text_entry_sizes (state *s) /* Now fix the width of the combo box. */ w = GTK_WIDGET (name_to_widget (s, "visual_combo")); - w = GTK_COMBO (w)->entry; + w = GTK_COMBO_BOX_ENTRY (w)->entry; width = gdk_string_width (w->style->font, "PseudoColor___"); gtk_widget_set_usize (w, width, -2); @@ -3313,7 +3313,7 @@ populate_demo_window (state *s, int list_elt) GtkFrame *frame1 = GTK_FRAME (name_to_widget (s, "preview_frame")); GtkFrame *frame2 = GTK_FRAME (name_to_widget (s, "opt_frame")); GtkEntry *cmd = GTK_ENTRY (name_to_widget (s, "cmd_text")); - GtkCombo *vis = GTK_COMBO (name_to_widget (s, "visual_combo")); + GtkComboBoxEntry *vis = GTK_COMBO_BOX_ENTRY (name_to_widget (s, "visual_combo")); GtkWidget *list = GTK_WIDGET (name_to_widget (s, "list")); if (p->mode == BLANK_ONLY) @@ -3363,7 +3363,7 @@ populate_demo_window (state *s, int list_elt) gtk_window_set_title (GTK_WINDOW (s->popup_widget), title); } - gtk_entry_set_text (GTK_ENTRY (GTK_COMBO (vis)->entry), + gtk_entry_set_text (GTK_ENTRY (gtk_bin_get_child (GTK_BIN (vis))), (hack ? (hack->visual && *hack->visual ? hack->visual @@ -5171,31 +5171,32 @@ main (int argc, char **argv) #endif /* !HAVE_GTK2 */ /* Hook up callbacks to the items on the mode menu. */ - { - GtkOptionMenu *opt = GTK_OPTION_MENU (name_to_widget (s, "mode_menu")); - GtkMenu *menu = GTK_MENU (gtk_option_menu_get_menu (opt)); - GList *kids = gtk_container_children (GTK_CONTAINER (menu)); - int i; - for (i = 0; kids; kids = kids->next, i++) - { - gtk_signal_connect (GTK_OBJECT (kids->data), "activate", - GTK_SIGNAL_FUNC (mode_menu_item_cb), - (gpointer) s); - - /* The "random-same" mode menu item does not appear unless - there are multple screens. - */ - if (s->nscreens <= 1 && - mode_menu_order[i] == RANDOM_HACKS_SAME) - gtk_widget_hide (GTK_WIDGET (kids->data)); - } + gtk_signal_connect (GTK_OBJECT (name_to_widget (s, "mode_menu")), + "changed", GTK_SIGNAL_FUNC (mode_menu_item_cb), + (gpointer) s); + if (s->nscreens <= 1) + { + GtkComboBox *opt = GTK_COMBO_BOX (name_to_widget (s, "mode_menu")); + GtkTreeModel *list = gtk_combo_box_get_model (opt); + unsigned int i; + for (i = 0; i < countof(mode_menu_order); i++) + { + /* The "random-same" mode menu item does not appear unless + there are multiple screens. + */ + if (mode_menu_order[i] == RANDOM_HACKS_SAME) + { + GtkTreeIter iter; + gtk_tree_model_iter_nth_child (list, &iter, NULL, i); + gtk_list_store_remove (GTK_LIST_STORE (list), &iter); + break; + } + } - if (s->nscreens <= 1) /* recompute option-menu size */ - { - gtk_widget_unrealize (GTK_WIDGET (menu)); - gtk_widget_realize (GTK_WIDGET (menu)); - } - } + /* recompute option-menu size */ + gtk_widget_unrealize (GTK_WIDGET (opt)); + gtk_widget_realize (GTK_WIDGET (opt)); + } /* Handle the -prefs command-line argument. */ |