qulogic/pidgin

Start switching Preferences dialog to Glade.

2018-06-19, Elliott Sales de Andrade
53a96425ffc0
Parents ff19cf5cc0dc
Children a59305ca30bb
Start switching Preferences dialog to Glade.
--- a/pidgin/gtkprefs.c Sun Jun 24 23:04:46 2018 -0400
+++ b/pidgin/gtkprefs.c Tue Jun 19 00:44:35 2018 -0400
@@ -86,12 +86,15 @@
gchar *original_name;
};
+struct _PidginPrefsWindow {
+ GtkDialog parent;
+
+ /* Notebook */
+ GtkWidget *notebook;
+};
+
/* Main dialog */
-static GtkWidget *prefs = NULL;
-
-/* Notebook */
-static GtkWidget *prefsnotebook = NULL;
-static int notebook_page = 0;
+static PidginPrefsWindow *prefs = NULL;
/* Conversations page */
static GtkWidget *sample_webview = NULL;
@@ -141,6 +144,7 @@
/*
* PROTOTYPES
*/
+G_DEFINE_TYPE(PidginPrefsWindow, pidgin_prefs_window, GTK_TYPE_DIALOG);
static void delete_prefs(GtkWidget *, void *);
static void
@@ -516,9 +520,6 @@
voice_volume = NULL;
video_drawing_area = NULL;
#endif
-
- notebook_page = 0;
- prefsnotebook = NULL;
prefs = NULL;
}
@@ -3462,6 +3463,8 @@
static void
toggle_voice_test_cb(GtkToggleButton *test, gpointer data)
{
+ PidginPrefsWindow *win = PIDGIN_PREFS_WINDOW(data);
+
if (gtk_toggle_button_get_active(test)) {
gtk_widget_set_sensitive(voice_level, TRUE);
enable_voice_test();
@@ -3470,7 +3473,7 @@
G_CALLBACK(on_volume_change_cb), NULL);
g_signal_connect(test, "destroy",
G_CALLBACK(voice_test_destroy_cb), NULL);
- g_signal_connect(prefsnotebook, "switch-page",
+ g_signal_connect(win->notebook, "switch-page",
G_CALLBACK(vv_test_switch_page_cb), test);
} else {
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(voice_level), 0.0);
@@ -3481,7 +3484,7 @@
g_object_disconnect(test, "any-signal::destroy",
G_CALLBACK(voice_test_destroy_cb), NULL,
NULL);
- g_object_disconnect(prefsnotebook, "any-signal::switch-page",
+ g_object_disconnect(win->notebook, "any-signal::switch-page",
G_CALLBACK(vv_test_switch_page_cb), test,
NULL);
voice_test_destroy_cb(NULL, NULL);
@@ -3509,7 +3512,7 @@
}
static void
-make_voice_test(GtkWidget *vbox)
+make_voice_test(PidginPrefsWindow *win, GtkWidget *vbox)
{
GtkWidget *test;
GtkWidget *hbox;
@@ -3560,7 +3563,7 @@
voice_level = level;
voice_threshold = threshold;
g_signal_connect(test, "toggled",
- G_CALLBACK(toggle_voice_test_cb), NULL);
+ G_CALLBACK(toggle_voice_test_cb), win);
}
static GstElement *
@@ -3672,17 +3675,19 @@
static void
toggle_video_test_cb(GtkToggleButton *test, gpointer data)
{
+ PidginPrefsWindow *win = PIDGIN_PREFS_WINDOW(data);
+
if (gtk_toggle_button_get_active(test)) {
enable_video_test();
g_signal_connect(test, "destroy",
G_CALLBACK(video_test_destroy_cb), NULL);
- g_signal_connect(prefsnotebook, "switch-page",
+ g_signal_connect(win->notebook, "switch-page",
G_CALLBACK(vv_test_switch_page_cb), test);
} else {
g_object_disconnect(test, "any-signal::destroy",
G_CALLBACK(video_test_destroy_cb), NULL,
NULL);
- g_object_disconnect(prefsnotebook, "any-signal::switch-page",
+ g_object_disconnect(win->notebook, "any-signal::switch-page",
G_CALLBACK(vv_test_switch_page_cb), test,
NULL);
video_test_destroy_cb(NULL, NULL);
@@ -3690,7 +3695,7 @@
}
static void
-make_video_test(GtkWidget *vbox)
+make_video_test(PidginPrefsWindow *win, GtkWidget *vbox)
{
GtkWidget *test;
GtkWidget *video;
@@ -3703,7 +3708,7 @@
gtk_box_pack_start(GTK_BOX(vbox), test, FALSE, FALSE, 0);
g_signal_connect(test, "toggled",
- G_CALLBACK(toggle_video_test_cb), NULL);
+ G_CALLBACK(toggle_video_test_cb), win);
}
static void
@@ -3826,7 +3831,7 @@
}
static GtkWidget *
-vv_page(void)
+vv_page(PidginPrefsWindow *win)
{
GtkWidget *ret;
GtkWidget *vbox;
@@ -3852,7 +3857,7 @@
g_signal_connect_object(manager, "elements-changed::audiosink",
G_CALLBACK(device_list_changed_cb), frame, 0);
- make_voice_test(vbox);
+ make_voice_test(win, vbox);
vbox = pidgin_make_frame(ret, _("Video"));
frame = make_vv_frame(vbox, sg, _("Input"),
@@ -3865,7 +3870,7 @@
g_signal_connect_object(manager, "elements-changed::videosink",
G_CALLBACK(device_list_changed_cb), frame, 0);
- make_video_test(vbox);
+ make_video_test(win, vbox);
gtk_widget_show_all(ret);
@@ -3874,49 +3879,59 @@
#endif
static int
-prefs_notebook_add_page(const char *text, GtkWidget *page, int ind)
+prefs_notebook_add_page(GtkNotebook *notebook, const char *text,
+ GtkWidget *page, int ind)
{
- return gtk_notebook_append_page(GTK_NOTEBOOK(prefsnotebook), page, gtk_label_new(text));
+ return gtk_notebook_append_page(notebook, page, gtk_label_new(text));
}
static void
-prefs_notebook_init(void)
+prefs_notebook_init(PidginPrefsWindow *win)
{
- prefs_notebook_add_page(_("Interface"), interface_page(), notebook_page++);
+ GtkNotebook *notebook = GTK_NOTEBOOK(win->notebook);
+ int notebook_page = 0;
+
+ prefs_notebook_add_page(notebook, _("Interface"), interface_page(), notebook_page++);
#ifndef _WIN32
/* We use the registered default browser in windows */
/* if the user is running Mac OS X, hide the browsers tab */
if(purple_running_osx() == FALSE)
- prefs_notebook_add_page(_("Browser"), browser_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Browser"), browser_page(), notebook_page++);
#endif
- prefs_notebook_add_page(_("Conversations"), conv_page(), notebook_page++);
- prefs_notebook_add_page(_("Logging"), logging_page(), notebook_page++);
- prefs_notebook_add_page(_("Network"), network_page(), notebook_page++);
- prefs_notebook_add_page(_("Proxy"), proxy_page(), notebook_page++);
- prefs_notebook_add_page(_("Password Storage"), keyring_page(), notebook_page++);
-
- prefs_notebook_add_page(_("Sounds"), sound_page(), notebook_page++);
- prefs_notebook_add_page(_("Status / Idle"), away_page(), notebook_page++);
- prefs_notebook_add_page(_("Themes"), theme_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Conversations"), conv_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Logging"), logging_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Network"), network_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Proxy"), proxy_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Password Storage"), keyring_page(), notebook_page++);
+
+ prefs_notebook_add_page(notebook, _("Sounds"), sound_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Status / Idle"), away_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Themes"), theme_page(), notebook_page++);
#ifdef USE_VV
- prefs_notebook_add_page(_("Voice/Video"), vv_page(), notebook_page++);
+ prefs_notebook_add_page(notebook, _("Voice/Video"), vv_page(win), notebook_page++);
#endif
}
-void
-pidgin_prefs_show(void)
+static void
+pidgin_prefs_window_class_init(PidginPrefsWindowClass *klass)
{
- GtkWidget *vbox;
- GtkWidget *notebook;
- GtkWidget *button;
-
- if (prefs) {
- gtk_window_present(GTK_WINDOW(prefs));
- return;
- }
-
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
+
+ gtk_widget_class_set_template_from_resource(
+ widget_class,
+ "/im/pidgin/Pidgin/Prefs/prefs.ui"
+ );
+
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, notebook);
+ gtk_widget_class_bind_template_callback(widget_class, delete_prefs);
+}
+
+static void
+pidgin_prefs_window_init(PidginPrefsWindow *win)
+{
/* copy the preferences to tmp values...
* I liked "take affect immediately" Oh well :-( */
/* (that should have been "effect," right?) */
@@ -3924,29 +3939,23 @@
/* Back to instant-apply! I win! BU-HAHAHA! */
/* Create the window */
- prefs = pidgin_create_dialog(_("Preferences"), 0, "preferences", FALSE);
- g_signal_connect(G_OBJECT(prefs), "destroy",
- G_CALLBACK(delete_prefs), NULL);
-
- vbox = pidgin_dialog_get_vbox_with_properties(GTK_DIALOG(prefs), FALSE, PIDGIN_HIG_BORDER);
-
- /* The notebook */
- prefsnotebook = notebook = gtk_notebook_new ();
- gtk_notebook_set_tab_pos(GTK_NOTEBOOK(notebook), GTK_POS_LEFT);
- gtk_box_pack_start(GTK_BOX (vbox), notebook, FALSE, FALSE, 0);
- gtk_widget_show(prefsnotebook);
-
- button = pidgin_dialog_add_button(GTK_DIALOG(prefs), GTK_STOCK_CLOSE, NULL, NULL);
- g_signal_connect_swapped(G_OBJECT(button), "clicked",
- G_CALLBACK(gtk_widget_destroy), prefs);
-
- prefs_notebook_init();
+ gtk_widget_init_template(GTK_WIDGET(win));
+
+ prefs_notebook_init(win);
/* Refresh the list of themes before showing the preferences window */
prefs_themes_refresh();
-
- /* Show everything. */
- gtk_widget_show(prefs);
+}
+
+void
+pidgin_prefs_show(void)
+{
+ if (prefs == NULL) {
+ prefs = PIDGIN_PREFS_WINDOW(g_object_new(
+ pidgin_prefs_window_get_type(), NULL));
+ }
+
+ gtk_window_present(GTK_WINDOW(prefs));
}
static void
--- a/pidgin/gtkprefs.h Sun Jun 24 23:04:46 2018 -0400
+++ b/pidgin/gtkprefs.h Tue Jun 19 00:44:35 2018 -0400
@@ -33,6 +33,27 @@
G_BEGIN_DECLS
+#define PIDGIN_TYPE_PREFS_WINDOW (pidgin_prefs_window_get_type())
+#if GLIB_CHECK_VERSION(2,44,0)
+G_DECLARE_FINAL_TYPE(PidginPrefsWindow, pidgin_prefs_window, PIDGIN, PREFS_WINDOW, GtkDialog)
+#else
+GType pidgin_prefs_window_get_type(void);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS
+typedef struct _PidginPrefsWindow PidginPrefsWindow;
+typedef struct { GtkDialogClass parent_class; } PidginPrefsWindowClass;
+static inline PidginPrefsWindow *
+PIDGIN_PREFS_WINDOW(gpointer ptr)
+{
+ return G_TYPE_CHECK_INSTANCE_CAST(ptr, pidgin_prefs_window_get_type(), PidginPrefsWindow);
+}
+static inline gboolean
+PIDGIN_IS_PREFS_WINDOW(gpointer ptr)
+{
+ return G_TYPE_CHECK_INSTANCE_TYPE(ptr, pidgin_prefs_window_get_type());
+}
+G_GNUC_END_IGNORE_DEPRECATIONS
+#endif
+
/**
* pidgin_prefs_init:
*
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pidgin/resources/Prefs/prefs.ui Tue Jun 19 00:44:35 2018 -0400
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.22.1 -->
+<interface>
+ <requires lib="gtk+" version="3.10"/>
+ <template class="PidginPrefsWindow" parent="GtkDialog">
+ <property name="can_focus">False</property>
+ <property name="title" translatable="yes">Preferences</property>
+ <property name="type_hint">dialog</property>
+ <signal name="destroy" handler="delete_prefs" swapped="no"/>
+ <child>
+ <placeholder/>
+ </child>
+ <child internal-child="vbox">
+ <object class="GtkBox">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox">
+ <property name="can_focus">False</property>
+ <property name="layout_style">end</property>
+ <child>
+ <object class="GtkButton">
+ <property name="label" translatable="yes">_Close</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_underline">True</property>
+ <signal name="clicked" handler="gtk_widget_destroy" object="PidginPrefsWindow" swapped="yes"/>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkNotebook" id="notebook">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="tab_pos">left</property>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </template>
+</interface>
--- a/pidgin/resources/pidgin.gresource.xml Sun Jun 24 23:04:46 2018 -0400
+++ b/pidgin/resources/pidgin.gresource.xml Tue Jun 19 00:44:35 2018 -0400
@@ -7,5 +7,6 @@
<file compressed="true">About/credits.json</file>
<file compressed="true">Debug/debug.ui</file>
<file compressed="true">Debug/filter-popover.ui</file>
+ <file compressed="true">Prefs/prefs.ui</file>
</gresource>
</gresources>