summaryrefslogtreecommitdiffstats
path: root/driver/demo-Gtk.c
diff options
context:
space:
mode:
Diffstat (limited to 'driver/demo-Gtk.c')
-rw-r--r--driver/demo-Gtk.c201
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. */