summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <qulogic@pidgin.im>2018-06-25 03:52:25 -0400
committerElliott Sales de Andrade <qulogic@pidgin.im>2018-06-25 03:52:25 -0400
commit1660a98dbc2644f3480c14fcc369f457dc3635c1 (patch)
treeddcba48881d8b7062503d287edefec077c5e3164
parentf9ad27dbf4b53cb09910ac7f84e6a22310c634ab (diff)
downloadpidgin-1660a98dbc2644f3480c14fcc369f457dc3635c1.tar.gz
prefs: Convert Browsers page to glade.
-rw-r--r--pidgin/gtkprefs.c180
-rw-r--r--pidgin/resources/Prefs/prefs.ui331
2 files changed, 423 insertions, 88 deletions
diff --git a/pidgin/gtkprefs.c b/pidgin/gtkprefs.c
index fd1be8638b..2cdb30a76e 100644
--- a/pidgin/gtkprefs.c
+++ b/pidgin/gtkprefs.c
@@ -106,6 +106,22 @@ struct _PidginPrefsWindow {
/* Notebook */
GtkWidget *notebook;
+ /* Browser page */
+ struct {
+ GtkWidget *page;
+ GtkWidget *stack;
+ /* GNOME version */
+ GtkWidget *gnome_not_found;
+ GtkWidget *gnome_program;
+ gchar *gnome_program_path;
+ /* Non-GNOME version */
+ PidginPrefCombo browser;
+ GtkWidget *place_hbox;
+ PidginPrefCombo place;
+ GtkWidget *manual_command_hbox;
+ GtkWidget *manual_command;
+ } browser;
+
/* Conversations page */
struct {
PidginPrefCombo notification_chat;
@@ -854,6 +870,7 @@ delete_prefs(GtkWidget *asdf, void *gdsa)
video_drawing_area = NULL;
#endif
g_free(prefs->proxy.gnome_program_path);
+ g_free(prefs->browser.gnome_program_path);
prefs = NULL;
}
@@ -2315,19 +2332,17 @@ proxy_button_clicked_cb(GtkWidget *button, PidginPrefsWindow *win)
g_error_free(err);
}
-#ifndef _WIN32
static void
-browser_button_clicked_cb(GtkWidget *button, gchar *path)
+browser_button_clicked_cb(GtkWidget *button, PidginPrefsWindow *win)
{
GError *err = NULL;
- if (g_spawn_command_line_async(path, &err))
+ if (g_spawn_command_line_async(win->browser.gnome_program_path, &err))
return;
purple_notify_error(NULL, NULL, _("Cannot start browser configuration program."), err->message, NULL);
g_error_free(err);
}
-#endif
static void
auto_ip_button_clicked_cb(GtkWidget *button, gpointer null)
@@ -2436,7 +2451,6 @@ bind_network_page(PidginPrefsWindow *win)
win->network.turn_password);
}
-#ifndef _WIN32
static gboolean
manual_browser_set(GtkWidget *entry, GdkEventFocus *event, gpointer data)
{
@@ -2448,6 +2462,7 @@ manual_browser_set(GtkWidget *entry, GdkEventFocus *event, gpointer data)
return FALSE;
}
+#ifndef _WIN32
static GList *
get_available_browsers(void)
{
@@ -2529,28 +2544,14 @@ browser_changed2_cb(const char *name, PurplePrefType type,
gtk_widget_set_sensitive(hbox, purple_strequal(browser, "custom"));
}
-static GtkWidget *
-browser_page(void)
+static void
+bind_browser_page(PidginPrefsWindow *win)
{
- GtkWidget *ret, *vbox, *hbox, *label, *entry, *browser_button;
- GtkSizeGroup *sg;
- GList *browsers = NULL;
-
- ret = gtk_box_new(GTK_ORIENTATION_VERTICAL, PIDGIN_HIG_CAT_SPACE);
- gtk_container_set_border_width (GTK_CONTAINER (ret), PIDGIN_HIG_BORDER);
-
- vbox = pidgin_make_frame (ret, _("Browser Selection"));
-
if (purple_running_gnome()) {
gchar *path;
- hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
- label = gtk_label_new(_("Browser preferences are configured in GNOME preferences"));
- gtk_container_add(GTK_CONTAINER(vbox), hbox);
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
-
- hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, PIDGIN_HIG_BOX_SPACE);
- gtk_container_add(GTK_CONTAINER(vbox), hbox);
+ gtk_stack_set_visible_child_name(GTK_STACK(win->browser.stack),
+ "gnome");
path = g_find_program_in_path("gnome-control-center");
if (path != NULL) {
@@ -2561,67 +2562,52 @@ browser_page(void)
path = g_find_program_in_path("gnome-default-applications-properties");
}
- if (path == NULL) {
- label = gtk_label_new(NULL);
- gtk_label_set_markup(GTK_LABEL(label),
- _("<b>Browser configuration program was not found.</b>"));
- gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
- } else {
- browser_button = gtk_button_new_with_mnemonic(_("Configure _Browser"));
- g_signal_connect_data(G_OBJECT(browser_button), "clicked",
- G_CALLBACK(browser_button_clicked_cb), path,
- (GClosureNotify)g_free, 0);
- gtk_box_pack_start(GTK_BOX(hbox), browser_button, FALSE, FALSE, 0);
- }
-
- gtk_widget_show_all(ret);
+ win->browser.gnome_program_path = path;
+ gtk_widget_set_visible(win->browser.gnome_not_found,
+ path == NULL);
+ gtk_widget_set_visible(win->browser.gnome_program,
+ path != NULL);
} else {
- sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL);
+ GList *browsers = NULL;
+
+ gtk_stack_set_visible_child_name(GTK_STACK(win->browser.stack),
+ "nongnome");
+ win->browser.browser.type = PURPLE_PREF_STRING;
+ win->browser.browser.key = PIDGIN_PREFS_ROOT "/browsers/browser";
browsers = get_available_browsers();
- if (browsers != NULL) {
- label = pidgin_prefs_dropdown_from_list(vbox,_("_Browser:"), PURPLE_PREF_STRING,
- PIDGIN_PREFS_ROOT "/browsers/browser",
- browsers);
- g_list_free(browsers);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_label_set_yalign(GTK_LABEL(label), 0.5);
- gtk_size_group_add_widget(sg, label);
-
- hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
- label = pidgin_prefs_dropdown(hbox, _("_Open link in:"), PURPLE_PREF_INT,
- PIDGIN_PREFS_ROOT "/browsers/place",
- _("Browser default"), PIDGIN_BROWSER_DEFAULT,
- _("New window"), PIDGIN_BROWSER_NEW_WINDOW,
- _("New tab"), PIDGIN_BROWSER_NEW_TAB,
- NULL);
- gtk_label_set_xalign(GTK_LABEL(label), 0.0);
- gtk_label_set_yalign(GTK_LABEL(label), 0.5);
- gtk_size_group_add_widget(sg, label);
- gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
-
- if (purple_strequal(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/browsers/browser"), "custom"))
- gtk_widget_set_sensitive(hbox, FALSE);
- purple_prefs_connect_callback(prefs, PIDGIN_PREFS_ROOT "/browsers/browser",
- browser_changed1_cb, hbox);
+ pidgin_prefs_bind_dropdown_from_list(
+ &win->browser.browser,
+ browsers);
+ g_list_free(browsers);
+
+ win->browser.place.type = PURPLE_PREF_INT;
+ win->browser.place.key = PIDGIN_PREFS_ROOT "/browsers/place";
+ pidgin_prefs_bind_dropdown(&win->browser.place);
+
+ purple_prefs_connect_callback(prefs,
+ PIDGIN_PREFS_ROOT "/browsers/browser",
+ browser_changed1_cb,
+ win->browser.place_hbox);
+
+ gtk_entry_set_text(GTK_ENTRY(win->browser.manual_command),
+ purple_prefs_get_string(PIDGIN_PREFS_ROOT "/browsers/manual_command"));
+ purple_prefs_connect_callback(prefs,
+ PIDGIN_PREFS_ROOT "/browsers/browser",
+ browser_changed2_cb,
+ win->browser.manual_command_hbox);
+
+ if (purple_strequal(
+ purple_prefs_get_string(
+ PIDGIN_PREFS_ROOT "/browsers/browser"),
+ "custom")) {
+ gtk_widget_set_sensitive(win->browser.place_hbox,
+ FALSE);
+ } else {
+ gtk_widget_set_sensitive(win->browser.manual_command_hbox,
+ FALSE);
}
-
- entry = gtk_entry_new();
- gtk_entry_set_text(GTK_ENTRY(entry),
- purple_prefs_get_string(PIDGIN_PREFS_ROOT "/browsers/manual_command"));
- g_signal_connect(G_OBJECT(entry), "focus-out-event",
- G_CALLBACK(manual_browser_set), NULL);
- hbox = pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Manual:\n(%s for URL)"), sg, entry, TRUE, NULL);
- if (!purple_strequal(purple_prefs_get_string(PIDGIN_PREFS_ROOT "/browsers/browser"), "custom"))
- gtk_widget_set_sensitive(hbox, FALSE);
- purple_prefs_connect_callback(prefs, PIDGIN_PREFS_ROOT "/browsers/browser",
- browser_changed2_cb, hbox);
-
- gtk_widget_show_all(ret);
- g_object_unref(sg);
}
-
- return ret;
}
#endif /*_WIN32*/
@@ -4026,11 +4012,17 @@ prefs_notebook_init(PidginPrefsWindow *win)
prefs_notebook_add_page(notebook, _("Interface"), interface_page(), notebook_page++);
-#ifndef _WIN32
+#ifdef _WIN32
/* We use the registered default browser in windows */
+ gtk_widget_hide(win->browser.page);
+#else
/* if the user is running Mac OS X, hide the browsers tab */
- if(purple_running_osx() == FALSE)
- prefs_notebook_add_page(notebook, _("Browser"), browser_page(), notebook_page++);
+ if (purple_running_osx()) {
+ gtk_widget_hide(win->browser.page);
+ } else {
+ bind_browser_page(win);
+ notebook_page++;
+ }
#endif
bind_conv_page(win);
@@ -4066,6 +4058,30 @@ pidgin_prefs_window_class_init(PidginPrefsWindowClass *klass)
widget_class, PidginPrefsWindow, notebook);
gtk_widget_class_bind_template_callback(widget_class, delete_prefs);
+ /* Browser page */
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.page);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.stack);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.gnome_not_found);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.gnome_program);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.browser.combo);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.place_hbox);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.place.combo);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.manual_command_hbox);
+ gtk_widget_class_bind_template_child(
+ widget_class, PidginPrefsWindow, browser.manual_command);
+ gtk_widget_class_bind_template_callback(widget_class,
+ browser_button_clicked_cb);
+ gtk_widget_class_bind_template_callback(widget_class,
+ manual_browser_set);
+
/* Conversations page */
gtk_widget_class_bind_template_child(
widget_class, PidginPrefsWindow,
diff --git a/pidgin/resources/Prefs/prefs.ui b/pidgin/resources/Prefs/prefs.ui
index 2fc51475d7..a05a7d69ac 100644
--- a/pidgin/resources/Prefs/prefs.ui
+++ b/pidgin/resources/Prefs/prefs.ui
@@ -2,6 +2,36 @@
<!-- Generated with glade 3.22.1 -->
<interface>
<requires lib="gtk+" version="3.10"/>
+ <object class="GtkListStore" id="browser.browser.store">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name value -->
+ <column type="gchararray"/>
+ </columns>
+ </object>
+ <object class="GtkListStore" id="browser.place.store">
+ <columns>
+ <!-- column-name text -->
+ <column type="gchararray"/>
+ <!-- column-name value -->
+ <column type="gint"/>
+ </columns>
+ <data>
+ <row>
+ <col id="0" translatable="yes">Browser default</col>
+ <col id="1">0</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">New window</col>
+ <col id="1">2</col>
+ </row>
+ <row>
+ <col id="0" translatable="yes">New tab</col>
+ <col id="1">3</col>
+ </row>
+ </data>
+ </object>
<object class="GtkAdjustment" id="conversations.custom_smiley_size.adjustment">
<property name="lower">16</property>
<property name="upper">512</property>
@@ -150,6 +180,284 @@
<property name="can_focus">True</property>
<property name="tab_pos">left</property>
<child>
+ <object class="GtkBox" id="browser.page">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="margin_left">12</property>
+ <property name="margin_right">12</property>
+ <property name="margin_top">12</property>
+ <property name="margin_bottom">12</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">18</property>
+ <child>
+ <object class="GtkFrame">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label_xalign">0</property>
+ <property name="shadow_type">none</property>
+ <child>
+ <object class="GtkAlignment">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="left_padding">12</property>
+ <child>
+ <object class="GtkStack" id="browser.stack">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="hhomogeneous">False</property>
+ <property name="vhomogeneous">False</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <child>
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Browser preferences are configured in GNOME preferences</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="browser.gnome_not_found">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Browser configuration program was not found.</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="browser.gnome_program">
+ <property name="label" translatable="yes">Configure _Browser</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="browser_button_clicked_cb" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">gnome</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkBox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Browser:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">browser.browser.combo</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="browser.browser.combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="model">browser.browser.store</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="browser.place_hbox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label6">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Open link in:</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">browser.place.combo</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkComboBox" id="browser.place.combo">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="model">browser.place.store</property>
+ <child>
+ <object class="GtkCellRendererText"/>
+ <attributes>
+ <attribute name="text">0</attribute>
+ </attributes>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkBox" id="browser.manual_command_hbox">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="spacing">6</property>
+ <child>
+ <object class="GtkLabel" id="label7">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">_Manual:
+(%s for URL)</property>
+ <property name="use_underline">True</property>
+ <property name="mnemonic_widget">browser.manual_command</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkEntry" id="browser.manual_command">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <signal name="focus-out-event" handler="manual_browser_set" swapped="no"/>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="name">nongnome</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ </child>
+ <child type="label">
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Browser Selection</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ <child type="tab">
+ <object class="GtkLabel">
+ <property name="visible">True</property>
+ <property name="can_focus">False</property>
+ <property name="label" translatable="yes">Browser</property>
+ </object>
+ <packing>
+ <property name="tab_fill">False</property>
+ </packing>
+ </child>
+ <child>
<object class="GtkBox" id="conversations.page">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -580,6 +888,9 @@
</packing>
</child>
</object>
+ <packing>
+ <property name="position">1</property>
+ </packing>
</child>
<child type="tab">
<object class="GtkLabel">
@@ -588,6 +899,7 @@
<property name="label" translatable="yes">Conversations</property>
</object>
<packing>
+ <property name="position">1</property>
<property name="tab_fill">False</property>
</packing>
</child>
@@ -730,7 +1042,7 @@
</child>
</object>
<packing>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
<child type="tab">
@@ -740,7 +1052,7 @@
<property name="label" translatable="yes">Logging</property>
</object>
<packing>
- <property name="position">1</property>
+ <property name="position">2</property>
<property name="tab_fill">False</property>
</packing>
</child>
@@ -1233,7 +1545,7 @@
</child>
</object>
<packing>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
<child type="tab">
@@ -1243,7 +1555,7 @@
<property name="label" translatable="yes">Network</property>
</object>
<packing>
- <property name="position">2</property>
+ <property name="position">3</property>
<property name="tab_fill">False</property>
</packing>
</child>
@@ -1561,7 +1873,7 @@
</child>
</object>
<packing>
- <property name="position">3</property>
+ <property name="position">4</property>
</packing>
</child>
<child type="tab">
@@ -1571,7 +1883,7 @@
<property name="label" translatable="yes">Proxy</property>
</object>
<packing>
- <property name="position">3</property>
+ <property name="position">4</property>
<property name="tab_fill">False</property>
</packing>
</child>
@@ -1585,6 +1897,13 @@
</object>
</child>
</template>
+ <object class="GtkSizeGroup" id="browser.sg">
+ <widgets>
+ <widget name="label5"/>
+ <widget name="label6"/>
+ <widget name="label7"/>
+ </widgets>
+ </object>
<object class="GtkSizeGroup" id="network.sg">
<widgets>
<widget name="label8"/>