pidgin/pidgin

Parents 81417b812648
Children 875489636847
Replace the manual browser opening code with gtk_show_uri_on_window

Remove the browser preference page.

replace the manual open uri code with gtk_show_uri_on_window

Testing Done:
Compiles, preference window functions properly, however talkatu doesn't handle links correctly so I couldn't test from messages or `help -> about`, but `help -> online help` worked just fine.

Reviewed at https://reviews.imfreedom.org/r/59/
--- a/pidgin/gtknotify.c Mon Jul 27 20:23:45 2020 -0500
+++ b/pidgin/gtknotify.c Mon Aug 03 20:20:02 2020 -0500
@@ -1228,278 +1228,9 @@
gtk_widget_destroy(GTK_WIDGET(ui_handle));
}
-#ifndef _WIN32
-static gboolean
-uri_command(GSList *arg_list, gboolean sync)
-{
- gchar *tmp;
- GError *error = NULL;
- GSList *it;
- gchar **argv;
- gint argc, i;
- gchar *program;
-
- g_return_val_if_fail(arg_list != NULL, FALSE);
-
- program = arg_list->data;
- purple_debug_misc("gtknotify", "Executing %s (%s)\n", program,
- sync ? "sync" : "async");
-
- if (!purple_program_is_valid(program)) {
- purple_debug_error("gtknotify", "Command \"%s\" is invalid\n",
- program);
- tmp = g_strdup_printf(
- _("The browser command \"%s\" is invalid."),
- program ? program : "(null)");
- purple_notify_error(NULL, NULL, _("Unable to open URL"), tmp, NULL);
- g_free(tmp);
-
- return FALSE;
- }
-
- argc = g_slist_length(arg_list);
- argv = g_new(gchar*, argc + 1);
- i = 0;
- for (it = arg_list; it; it = g_slist_next(it)) {
- if (purple_debug_is_verbose()) {
- purple_debug_misc("gtknotify", "argv[%d] = \"%s\"\n",
- i, (gchar*)it->data);
- }
- argv[i++] = it->data;
- }
- argv[i] = NULL;
-
- if (sync) {
- gint exit_status = 0;
-
- if (g_spawn_sync(NULL, argv, NULL, G_SPAWN_SEARCH_PATH |
- G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL,
- NULL, NULL, NULL, NULL, &exit_status, &error) &&
- exit_status == 0)
- {
- g_free(argv);
- return TRUE;
- }
-
- purple_debug_error("gtknotify",
- "Error launching \"%s\": %s (status: %d)\n", program,
- error ? error->message : "(null)", exit_status);
- tmp = g_strdup_printf(_("Error launching \"%s\": %s"), program,
- error ? error->message : "(null)");
- g_error_free(error);
- purple_notify_error(NULL, NULL, _("Unable to open URL"), tmp, NULL);
- g_free(tmp);
-
- g_free(argv);
- return FALSE;
- }
-
- if (g_spawn_async(NULL, argv, NULL, G_SPAWN_SEARCH_PATH |
- G_SPAWN_STDOUT_TO_DEV_NULL | G_SPAWN_STDERR_TO_DEV_NULL, NULL,
- NULL, NULL, &error))
- {
- g_free(argv);
- return TRUE;
- }
-
- purple_debug_warning("gtknotify", "Error launching \"%s\": %s\n",
- program, error ? error->message : "(null)");
- g_error_free(error);
-
- g_free(argv);
- return FALSE;
-}
-#endif /* _WIN32 */
-
static void *
-pidgin_notify_uri(const char *uri)
-{
-#ifndef _WIN32
- const char *web_browser;
- int place;
- gchar *uri_escaped, *uri_custom = NULL;
- GSList *argv = NULL, *argv_remote = NULL;
- gchar **usercmd_argv = NULL;
-
- uri_escaped = purple_uri_escape_for_open(uri);
-
- web_browser = purple_prefs_get_string(PIDGIN_PREFS_ROOT
- "/browsers/browser");
- place = purple_prefs_get_int(PIDGIN_PREFS_ROOT "/browsers/place");
-
- /* if they are running gnome, use the gnome web browser */
- if (purple_running_gnome() == TRUE) {
- char *tmp = g_find_program_in_path("xdg-open");
- if (tmp == NULL)
- argv = g_slist_append(argv, "gnome-open");
- else
- argv = g_slist_append(argv, "xdg-open");
- g_free(tmp);
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_running_osx() == TRUE) {
- argv = g_slist_append(argv, "open");
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_strequal(web_browser, "epiphany") ||
- purple_strequal(web_browser, "galeon"))
- {
- argv = g_slist_append(argv, (gpointer)web_browser);
-
- if (place == PIDGIN_BROWSER_NEW_WINDOW)
- argv = g_slist_append(argv, "-w");
- else if (place == PIDGIN_BROWSER_NEW_TAB)
- argv = g_slist_append(argv, "-n");
-
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_strequal(web_browser, "xdg-open")) {
- argv = g_slist_append(argv, "xdg-open");
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_strequal(web_browser, "gnome-open")) {
- argv = g_slist_append(argv, "gnome-open");
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_strequal(web_browser, "kfmclient")) {
- argv = g_slist_append(argv, "kfmclient");
- argv = g_slist_append(argv, "openURL");
- argv = g_slist_append(argv, uri_escaped);
- /*
- * Does Konqueror have options to open in new tab
- * and/or current window?
- */
- } else if (purple_strequal(web_browser, "mozilla") ||
- purple_strequal(web_browser, "mozilla-firebird") ||
- purple_strequal(web_browser, "firefox") ||
- purple_strequal(web_browser, "seamonkey"))
- {
- argv = g_slist_append(argv, (gpointer)web_browser);
- argv = g_slist_append(argv, uri_escaped);
-
- g_assert(uri_custom == NULL);
- if (place == PIDGIN_BROWSER_NEW_WINDOW) {
- uri_custom = g_strdup_printf("openURL(%s,new-window)",
- uri_escaped);
- } else if (place == PIDGIN_BROWSER_NEW_TAB) {
- uri_custom = g_strdup_printf("openURL(%s,new-tab)",
- uri_escaped);
- }
-
- if (uri_custom != NULL) {
- argv_remote = g_slist_append(argv_remote,
- (gpointer)web_browser);
-
- /* Firefox 0.9 and higher require a "-a firefox" option
- * when using -remote commands. This breaks older
- * versions of mozilla. So we include this other handly
- * little string when calling firefox. If the API for
- * remote calls changes any more in firefox then firefox
- * should probably be split apart from mozilla-firebird
- * and mozilla... but this is good for now.
- */
- if (purple_strequal(web_browser, "firefox")) {
- argv_remote = g_slist_append(argv_remote, "-a");
- argv_remote = g_slist_append(argv_remote,
- "firefox");
- }
-
- argv_remote = g_slist_append(argv_remote, "-remote");
- argv_remote = g_slist_append(argv_remote, uri_custom);
- }
- } else if (purple_strequal(web_browser, "opera")) {
- argv = g_slist_append(argv, "opera");
-
- if (place == PIDGIN_BROWSER_NEW_WINDOW)
- argv = g_slist_append(argv, "-newwindow");
- else if (place == PIDGIN_BROWSER_NEW_TAB)
- argv = g_slist_append(argv, "-newpage");
- /* `opera -remote "openURL(%s)"` command causes Pidgin to hang,
- * if there is no Opera instance running.
- */
-
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_strequal(web_browser, "google-chrome")) {
- /* Google Chrome doesn't have command-line arguments that
- * control the opening of links from external calls. This is
- * controlled solely from a preference within Google Chrome.
- */
- argv = g_slist_append(argv, "google-chrome");
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_strequal(web_browser, "chrome")) {
- /* Chromium doesn't have command-line arguments that control
- * the opening of links from external calls. This is controlled
- * solely from a preference within Chromium.
- */
- argv = g_slist_append(argv, "chrome");
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_strequal(web_browser, "chromium-browser")) {
- /* Chromium doesn't have command-line arguments that control the
- * opening of links from external calls. This is controlled
- * solely from a preference within Chromium.
- */
- argv = g_slist_append(argv, "chromium-browser");
- argv = g_slist_append(argv, uri_escaped);
- } else if (purple_strequal(web_browser, "custom")) {
- GError *error = NULL;
- const char *usercmd_command;
- gint usercmd_argc, i;
- gboolean uri_added = FALSE;
-
- usercmd_command = purple_prefs_get_string(PIDGIN_PREFS_ROOT
- "/browsers/manual_command");
-
- if (usercmd_command == NULL || *usercmd_command == '\0') {
- purple_notify_error(NULL, NULL, _("Unable to open URL"),
- _("The 'Manual' browser command has been "
- "chosen, but no command has been set."), NULL);
- g_free(uri_escaped);
- return NULL;
- }
-
- if (!g_shell_parse_argv(usercmd_command, &usercmd_argc,
- &usercmd_argv, &error))
- {
- purple_notify_error(NULL, NULL, _("Unable to open URL: "
- "the 'Manual' browser command seems invalid."),
- error ? error->message : NULL, NULL);
- g_error_free(error);
- g_free(uri_escaped);
- return NULL;
- }
-
- for (i = 0; i < usercmd_argc; i++) {
- gchar *cmd_part = usercmd_argv[i];
-
- if (uri_added || strstr(cmd_part, "%s") == NULL) {
- argv = g_slist_append(argv, cmd_part);
- continue;
- }
-
- uri_custom = purple_strreplace(cmd_part, "%s",
- uri_escaped);
- argv = g_slist_append(argv, uri_custom);
- uri_added = TRUE;
- }
-
- /* There is no "%s" in the browser command. Assume the user
- * wanted the URL tacked on to the end of the command.
- */
- if (!uri_added)
- argv = g_slist_append(argv, uri_escaped);
- }
-
- if (argv_remote != NULL) {
- /* try the remote command first */
- if (!uri_command(argv_remote, TRUE))
- uri_command(argv, FALSE);
- } else
- uri_command(argv, FALSE);
-
- g_strfreev(usercmd_argv);
- g_free(uri_escaped);
- g_free(uri_custom);
- g_slist_free(argv);
- g_slist_free(argv_remote);
-
-#else /* !_WIN32 */
- winpidgin_notify_uri(uri);
-#endif /* !_WIN32 */
+pidgin_notify_uri(const char *uri) {
+ gtk_show_uri_on_window(NULL, uri, GDK_CURRENT_TIME, NULL);
return NULL;
}
--- a/pidgin/gtkprefs.c Mon Jul 27 20:23:45 2020 -0500
+++ b/pidgin/gtkprefs.c Mon Aug 03 20:20:02 2020 -0500
@@ -112,22 +112,6 @@
} conversations;
} iface;
- /* 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;
@@ -903,7 +887,6 @@
keyring_page_cleanup(prefs);
g_free(prefs->proxy.gnome_program_path);
- g_free(prefs->browser.gnome_program_path);
prefs = NULL;
}
@@ -1909,18 +1892,6 @@
}
static void
-browser_button_clicked_cb(GtkWidget *button, PidginPrefsWindow *win)
-{
- GError *err = NULL;
-
- 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);
-}
-
-static void
auto_ip_button_clicked_cb(GtkWidget *button, gpointer null)
{
const char *ip;
@@ -2027,175 +1998,6 @@
win->network.turn_password);
}
-static gboolean
-manual_browser_set(GtkWidget *entry, GdkEventFocus *event, gpointer data)
-{
- const char *program = gtk_entry_get_text(GTK_ENTRY(entry));
-
- purple_prefs_set_string(PIDGIN_PREFS_ROOT "/browsers/manual_command", program);
-
- /* carry on normally */
- return FALSE;
-}
-
-#ifndef _WIN32
-static GList *
-get_available_browsers(void)
-{
- struct browser {
- char *name;
- char *command;
- };
-
- /* Sorted reverse alphabetically */
- static const struct browser possible_browsers[] = {
- {N_("Seamonkey"), "seamonkey"},
- {N_("Opera"), "opera"},
- {N_("Mozilla"), "mozilla"},
- {N_("Konqueror"), "kfmclient"},
- {N_("Google Chrome"), "google-chrome"},
- /* Do not move the line below. Code below expects gnome-open to be in
- * this list immediately after xdg-open! */
- {N_("Desktop Default"), "xdg-open"},
- {N_("GNOME Default"), "gnome-open"},
- {N_("Galeon"), "galeon"},
- {N_("Firefox"), "firefox"},
- {N_("Firebird"), "mozilla-firebird"},
- {N_("Epiphany"), "epiphany"},
- /* Translators: please do not translate "chromium-browser" here! */
- {N_("Chromium (chromium-browser)"), "chromium-browser"},
- /* Translators: please do not translate "chrome" here! */
- {N_("Chromium (chrome)"), "chrome"}
- };
- static const int num_possible_browsers = G_N_ELEMENTS(possible_browsers);
-
- GList *browsers = NULL;
- int i = 0;
- char *browser_setting = (char *)purple_prefs_get_string(PIDGIN_PREFS_ROOT "/browsers/browser");
-
- browsers = g_list_prepend(browsers, (gpointer)"custom");
- browsers = g_list_prepend(browsers, (gpointer)_("Manual"));
-
- for (i = 0; i < num_possible_browsers; i++) {
- if (purple_program_is_valid(possible_browsers[i].command)) {
- browsers = g_list_prepend(browsers,
- possible_browsers[i].command);
- browsers = g_list_prepend(browsers, (gpointer)_(possible_browsers[i].name));
- if(browser_setting && purple_strequal(possible_browsers[i].command, browser_setting))
- browser_setting = NULL;
- /* If xdg-open is valid, prefer it over gnome-open and skip forward */
- if(purple_strequal(possible_browsers[i].command, "xdg-open")) {
- if (purple_strequal("gnome-open", browser_setting)) {
- purple_prefs_set_string(PIDGIN_PREFS_ROOT "/browsers/browser", possible_browsers[i].command);
- browser_setting = NULL;
- }
- i++;
- }
- }
- }
-
- if(browser_setting)
- purple_prefs_set_string(PIDGIN_PREFS_ROOT "/browsers/browser", "custom");
-
- return browsers;
-}
-
-static void
-browser_changed1_cb(const char *name, PurplePrefType type,
- gconstpointer value, gpointer data)
-{
- GtkWidget *hbox = data;
- const char *browser = value;
-
- gtk_widget_set_sensitive(hbox, !purple_strequal(browser, "custom"));
-}
-
-static void
-browser_changed2_cb(const char *name, PurplePrefType type,
- gconstpointer value, gpointer data)
-{
- GtkWidget *hbox = data;
- const char *browser = value;
-
- gtk_widget_set_sensitive(hbox, purple_strequal(browser, "custom"));
-}
-#endif /* _WIN32 */
-
-static void
-bind_browser_page(PidginPrefsWindow *win)
-{
-#ifdef _WIN32
- /* We use the registered default browser in windows */
- gtk_widget_hide(win->browser.page);
- return;
-#else
- /* if the user is running Mac OS X, hide the browsers tab */
- if (purple_running_osx()) {
- gtk_widget_hide(win->browser.page);
- } else if (purple_running_gnome()) {
- gchar *path;
-
- gtk_stack_set_visible_child_name(GTK_STACK(win->browser.stack),
- "gnome");
-
- path = g_find_program_in_path("gnome-control-center");
- if (path != NULL) {
- gchar *tmp = g_strdup_printf("%s info", path);
- g_free(path);
- path = tmp;
- } else {
- path = g_find_program_in_path("gnome-default-applications-properties");
- }
-
- 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 {
- 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();
- 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);
- }
- }
-#endif /* _WIN32 */
-}
-
static void
bind_proxy_page(PidginPrefsWindow *win)
{
@@ -3425,7 +3227,6 @@
#endif
bind_interface_page(win);
- bind_browser_page(win);
bind_conv_page(win);
bind_logging_page(win);
bind_network_page(win);
@@ -3478,30 +3279,6 @@
widget_class, PidginPrefsWindow,
iface.conversations.tab_side.combo);
- /* 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,
@@ -3784,14 +3561,6 @@
purple_prefs_add_none(PIDGIN_PREFS_ROOT "");
purple_prefs_add_none("/plugins/gtk");
-#ifndef _WIN32
- /* Browsers */
- purple_prefs_add_none(PIDGIN_PREFS_ROOT "/browsers");
- purple_prefs_add_int(PIDGIN_PREFS_ROOT "/browsers/place", PIDGIN_BROWSER_DEFAULT);
- purple_prefs_add_string(PIDGIN_PREFS_ROOT "/browsers/manual_command", "");
- purple_prefs_add_string(PIDGIN_PREFS_ROOT "/browsers/browser", "xdg-open");
-#endif
-
/* Plugins */
purple_prefs_add_none(PIDGIN_PREFS_ROOT "/plugins");
purple_prefs_add_path_list(PIDGIN_PREFS_ROOT "/plugins/loaded", NULL);
@@ -3844,23 +3613,6 @@
purple_prefs_rename_boolean_toggle(PIDGIN_PREFS_ROOT "/conversations/ignore_colors",
PIDGIN_PREFS_ROOT "/conversations/show_incoming_formatting");
- /*
- * This path pref changed to a string, so migrate. I know this will
- * break things for and confuse users that use multiple versions with
- * the same config directory, but I'm not inclined to want to deal with
- * that at the moment. -- rekkanoryo
- */
- if (purple_prefs_exists(PIDGIN_PREFS_ROOT "/browsers/command") &&
- purple_prefs_get_pref_type(PIDGIN_PREFS_ROOT "/browsers/command") ==
- PURPLE_PREF_PATH)
- {
- const char *str = purple_prefs_get_path(
- PIDGIN_PREFS_ROOT "/browsers/command");
- purple_prefs_set_string(
- PIDGIN_PREFS_ROOT "/browsers/manual_command", str);
- purple_prefs_remove(PIDGIN_PREFS_ROOT "/browsers/command");
- }
-
/* Remove some no-longer-used prefs */
purple_prefs_remove(PIDGIN_PREFS_ROOT "/blist/auto_expand_contacts");
purple_prefs_remove(PIDGIN_PREFS_ROOT "/blist/button_style");
@@ -3871,6 +3623,11 @@
purple_prefs_remove(PIDGIN_PREFS_ROOT "/blist/tooltip_delay");
purple_prefs_remove(PIDGIN_PREFS_ROOT "/blist/x");
purple_prefs_remove(PIDGIN_PREFS_ROOT "/blist/y");
+ purple_prefs_remove(PIDGIN_PREFS_ROOT "/browsers");
+ purple_prefs_remove(PIDGIN_PREFS_ROOT "/browsers/browser");
+ purple_prefs_remove(PIDGIN_PREFS_ROOT "/browsers/command");
+ purple_prefs_remove(PIDGIN_PREFS_ROOT "/browsers/place");
+ purple_prefs_remove(PIDGIN_PREFS_ROOT "/browsers/manual_command");
purple_prefs_remove(PIDGIN_PREFS_ROOT "/conversations/button_type");
purple_prefs_remove(PIDGIN_PREFS_ROOT "/conversations/ctrl_enter_sends");
purple_prefs_remove(PIDGIN_PREFS_ROOT "/conversations/enter_sends");
@@ -3948,22 +3705,5 @@
purple_prefs_remove(PIDGIN_PREFS_ROOT "/vvconfig/audio/sink/plugin");
purple_prefs_remove(PIDGIN_PREFS_ROOT "/vvconfig/video/src/plugin");
purple_prefs_remove(PIDGIN_PREFS_ROOT "/vvconfig/video/sink/plugin");
-
-#ifndef _WIN32
- /* Added in 3.0.0. */
- if (purple_prefs_get_int(PIDGIN_PREFS_ROOT "/browsers/place") == 1) {
- /* If the "open link in" pref is set to the old value for "existing
- window" then change it to "default." */
- purple_prefs_set_int(PIDGIN_PREFS_ROOT "/browsers/place",
- PIDGIN_BROWSER_DEFAULT);
- }
-
- /* Added in 3.0.0. */
- if (g_str_equal(
- purple_prefs_get_string(PIDGIN_PREFS_ROOT "/browsers/browser"),
- "netscape")) {
- purple_prefs_set_string(PIDGIN_PREFS_ROOT "/browsers/browser", "xdg-open");
- }
-#endif /* !_WIN32 */
}
--- a/pidgin/resources/Prefs/prefs.ui Mon Jul 27 20:23:45 2020 -0500
+++ b/pidgin/resources/Prefs/prefs.ui Mon Aug 03 20:20:02 2020 -0500
@@ -77,36 +77,6 @@
<property name="step_increment">1</property>
<property name="page_increment">10</property>
</object>
- <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>
@@ -717,276 +687,6 @@
</packing>
</child>
<child>
- <object class="GtkBox" id="browser.page">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="border_width">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>
- <packing>
- <property name="name">browser</property>
- <property name="title" translatable="yes">Browser</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
<object class="GtkBox" id="conversations.page">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -1457,7 +1157,7 @@
<packing>
<property name="name">conversations</property>
<property name="title" translatable="yes">Conversations</property>
- <property name="position">2</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
@@ -1598,7 +1298,7 @@
<packing>
<property name="name">logging</property>
<property name="title" translatable="yes">Logging</property>
- <property name="position">3</property>
+ <property name="position">2</property>
</packing>
</child>
<child>
@@ -2089,7 +1789,7 @@
<packing>
<property name="name">network</property>
<property name="title" translatable="yes">Network</property>
- <property name="position">4</property>
+ <property name="position">3</property>
</packing>
</child>
<child>
@@ -2405,7 +2105,7 @@
<packing>
<property name="name">proxy</property>
<property name="title" translatable="yes">Proxy</property>
- <property name="position">5</property>
+ <property name="position">4</property>
</packing>
</child>
<child>
@@ -2500,7 +2200,7 @@
<packing>
<property name="name">keyring</property>
<property name="title" translatable="yes">Password Storage</property>
- <property name="position">6</property>
+ <property name="position">5</property>
</packing>
</child>
<child>
@@ -2883,7 +2583,7 @@
<packing>
<property name="name">sound</property>
<property name="title" translatable="yes">Sounds</property>
- <property name="position">7</property>
+ <property name="position">6</property>
</packing>
</child>
<child>
@@ -3214,7 +2914,7 @@
<packing>
<property name="name">away</property>
<property name="title" translatable="yes">Status / Idle</property>
- <property name="position">8</property>
+ <property name="position">7</property>
</packing>
</child>
<child>
@@ -3497,7 +3197,7 @@
<packing>
<property name="name">theme</property>
<property name="title" translatable="yes">Themes</property>
- <property name="position">9</property>
+ <property name="position">8</property>
</packing>
</child>
</object>
@@ -3527,13 +3227,6 @@
<widget name="away.startup_label"/>
</widgets>
</object>
- <object class="GtkSizeGroup" id="browser.sg">
- <widgets>
- <widget name="label5"/>
- <widget name="label6"/>
- <widget name="label7"/>
- </widgets>
- </object>
<object class="GtkSizeGroup" id="iface.sg">
<widgets>
<widget name="label2"/>
--- a/pidgin/win32/gtkwin32dep.c Mon Jul 27 20:23:45 2020 -0500
+++ b/pidgin/win32/gtkwin32dep.c Mon Aug 03 20:20:02 2020 -0500
@@ -184,22 +184,6 @@
}
-void winpidgin_notify_uri(const char *uri) {
- /* Allow a few commonly used and "safe" schemes to go to the specific
- * class handlers and send everything else to the default http browser.
- * This isn't optimal, but should cover the most common cases. I didn't
- * see any better secure solutions when I did some research.
- */
- gchar *scheme = g_uri_parse_scheme(uri);
- if (scheme && (g_ascii_strcasecmp(scheme, "https") == 0
- || g_ascii_strcasecmp(scheme, "ftp") == 0
- || g_ascii_strcasecmp(scheme, "mailto") == 0))
- winpidgin_shell_execute(uri, "open", scheme);
- else
- winpidgin_shell_execute(uri, "open", "http");
- g_free(scheme);
-}
-
#define PIDGIN_WM_FOCUS_REQUEST (WM_APP + 13)
#define PIDGIN_WM_PROTOCOL_HANDLE (WM_APP + 14)
--- a/pidgin/win32/gtkwin32dep.h Mon Jul 27 20:23:45 2020 -0500
+++ b/pidgin/win32/gtkwin32dep.h Mon Aug 03 20:20:02 2020 -0500
@@ -42,7 +42,6 @@
int winpidgin_gz_untar(const char* filename, const char* destdir);
/* Misc */
-void winpidgin_notify_uri(const char *uri);
void winpidgin_shell_execute(const char *target, const char *verb, const char *clazz);
void winpidgin_ensure_onscreen(GtkWidget *win);
void winpidgin_conv_blink(PurpleConversation *conv);