pidgin/pidginapplication.c

Sun, 09 Jun 2024 15:36:02 -0500

author
Markus Fischer <ivanhoe@fiscari.de>
date
Sun, 09 Jun 2024 15:36:02 -0500
changeset 42787
a96dfca87750
parent 42746
bd2da74b9201
child 42858
a227c1f6c299
permissions
-rw-r--r--

IRCv3: Only set up SASL if the account requires a password

Testing Done:
Connected both an account with and without password.

Reviewed at https://reviews.imfreedom.org/r/3249/

40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 /*
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2 * Pidgin - Internet Messenger
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 * Copyright (C) Pidgin Developers <devel@pidgin.im>
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4 *
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 * Pidgin is the legal property of its developers, whose names are too numerous
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6 * to list here. Please refer to the COPYRIGHT file distributed with this
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 * source distribution.
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 *
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 * This program is free software; you can redistribute it and/or modify
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12 * (at your option) any later version.
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 *
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14 * This program is distributed in the hope that it will be useful,
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 * GNU General Public License for more details.
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18 *
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 */
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
42410
563e7a17c220 Fix possible clash of config headers
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42377
diff changeset
23 #include <purpleconfig.h>
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 #include <glib.h>
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 #include <glib/gi18n-lib.h>
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 #include <glib/gstdio.h>
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 #include <gplugin.h>
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 #include <purple.h>
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31
41520
a5dd595361b4 Replace libhandy with libadwaita
Gary Kramlich <grim@reaperworld.com>
parents: 41479
diff changeset
32 #include <adwaita.h>
40873
68c7ef6c5320 Convert credentials page to use HdyPreferencesGroup and a list box.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40803
diff changeset
33
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34 #include "pidginapplication.h"
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
36 #include "pidginabout.h"
41689
e1d3677c844b Replace calls to the old account editor with the new editor.
Gary Kramlich <grim@reaperworld.com>
parents: 41656
diff changeset
37 #include "pidginaccounteditor.h"
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents: 41307
diff changeset
38 #include "pidginaccountmanager.h"
41450
ce81f2bc04ca Rename PidginInactiveAccountsMenu to PidginAccountsDisabledMenu to match PidginAccountsEnabledMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41441
diff changeset
39 #include "pidginaccountsdisabledmenu.h"
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
40 #include "pidginaccountsenabledmenu.h"
42377
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
41 #include "pidginchanneljoindialog.h"
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 #include "pidgincore.h"
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 #include "pidgindebug.h"
41702
4289b30044ed Rename pidginconversationwindow.[ch] to pidgindisplaywindow.[ch]
Gary Kramlich <grim@reaperworld.com>
parents: 41696
diff changeset
44 #include "pidgindisplaywindow.h"
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41396
diff changeset
45 #include "pidginpluginsmenu.h"
41867
5375c1d58c50 Create PurpleUi that merges PurpleCoreUiOps and PurpleUiInfo
Gary Kramlich <grim@reaperworld.com>
parents: 41853
diff changeset
46 #include "pidginprefs.h"
5375c1d58c50 Create PurpleUi that merges PurpleCoreUiOps and PurpleUiInfo
Gary Kramlich <grim@reaperworld.com>
parents: 41853
diff changeset
47 #include "pidginui.h"
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 struct _PidginApplication {
42361
59f54c17c61f Make PidginApplication subclass AdwApplication
Gary Kramlich <grim@reaperworld.com>
parents: 42291
diff changeset
50 AdwApplication parent;
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
51
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
52 GHashTable *action_groups;
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 };
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 /******************************************************************************
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 * Globals
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 *****************************************************************************/
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58 static gchar *opt_config_dir_arg = NULL;
41336
844484fb31aa The debug command line option does not actually take an argument.
Stu Tomlinson <stu@nosnilmot.com>
parents: 41320
diff changeset
59 static gboolean opt_debug = FALSE;
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 static gboolean opt_nologin = FALSE;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 static GOptionEntry option_entries[] = {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64 "config", 'c', 0, G_OPTION_ARG_FILENAME, &opt_config_dir_arg,
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 N_("use DIR for config files"), N_("DIR")
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 }, {
41336
844484fb31aa The debug command line option does not actually take an argument.
Stu Tomlinson <stu@nosnilmot.com>
parents: 41320
diff changeset
67 "debug", 'd', 0, G_OPTION_ARG_NONE, &opt_debug,
41127
cd297cfc56f3 Move debug command-line option to the UIs
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41117
diff changeset
68 N_("print debugging messages to stdout"), NULL
cd297cfc56f3 Move debug command-line option to the UIs
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41117
diff changeset
69 }, {
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 "nologin", 'n', 0, G_OPTION_ARG_NONE, &opt_nologin,
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 N_("don't automatically login"), NULL
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 },
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 "version", 'v', 0, G_OPTION_ARG_NONE, NULL,
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 N_("display the current version and exit"), NULL
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 }, {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 NULL
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 };
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80
42575
580339aa47cc Make sure all of the final types in pidgin are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42562
diff changeset
81 G_DEFINE_FINAL_TYPE(PidginApplication, pidgin_application,
580339aa47cc Make sure all of the final types in pidgin are defined as such
Gary Kramlich <grim@reaperworld.com>
parents: 42562
diff changeset
82 ADW_TYPE_APPLICATION)
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 /******************************************************************************
41169
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
85 * Helpers
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
86 *****************************************************************************/
41634
f73f2b9c75b4 Do our best to set a transient parent for all of our dialogs
Gary Kramlich <grim@reaperworld.com>
parents: 41630
diff changeset
87
f73f2b9c75b4 Do our best to set a transient parent for all of our dialogs
Gary Kramlich <grim@reaperworld.com>
parents: 41630
diff changeset
88 /*
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
89 * pidgin_application_get_account_manager:
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
90 *
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
91 * The Pidgin account manager can get opened from multiple actions, so this
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
92 * helper manages the singleton.
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
93 *
42620
72178a341eb8 Remove minor versions from Since tags in Pidgin
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42575
diff changeset
94 * Since: 3.0
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
95 */
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
96 static GtkWidget *
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
97 pidgin_application_get_account_manager(void) {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
98 static GtkWidget *manager = NULL;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
99
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
100 if(!PIDGIN_IS_ACCOUNT_MANAGER(manager)) {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
101 manager = pidgin_account_manager_new();
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
102 g_object_add_weak_pointer(G_OBJECT(manager), (gpointer)&manager);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
103 }
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
104
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
105 return manager;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
106 }
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
107
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
108 /*
41708
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
109 * pidgin_application_present_transient_window:
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
110 * @application: The application instance.
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
111 * @window: The [class@Gtk.Window] to present.
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
112 *
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
113 * Presents a window and makes sure its transient parent is set to the currently
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
114 * active window of @application.
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
115 *
42620
72178a341eb8 Remove minor versions from Since tags in Pidgin
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 42575
diff changeset
116 * Since: 3.0
41708
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
117 */
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
118 static void
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
119 pidgin_application_present_transient_window(PidginApplication *application,
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
120 GtkWindow *window)
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
121 {
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
122 GtkWindow *active_window = NULL;
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
123
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
124 g_return_if_fail(PIDGIN_IS_APPLICATION(application));
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
125 g_return_if_fail(GTK_IS_WINDOW(window));
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
126
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
127 active_window = pidgin_application_get_active_window(application);
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
128
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
129 gtk_window_set_transient_for(window, active_window);
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
130
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
131 gtk_window_present_with_time(window, GDK_CURRENT_TIME);
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
132 }
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
133
41651
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
134 static void
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
135 pidgin_application_plugin_state_changed(G_GNUC_UNUSED GPluginManager *manager,
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
136 G_GNUC_UNUSED GPluginPlugin *plugin,
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
137 G_GNUC_UNUSED gpointer data)
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
138 {
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
139 purple_plugins_save_loaded(PIDGIN_PREFS_ROOT "/plugins/loaded");
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
140 }
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
141
41169
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
142 static void
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
143 pidgin_application_init_plugins(void) {
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
144 GPluginManager *manager = gplugin_manager_get_default();
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
145
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
146 gplugin_manager_append_paths_from_environment(manager,
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
147 "PIDGIN_PLUGIN_PATH");
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
148
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
149 if(g_getenv("PURPLE_PLUGINS_SKIP")) {
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
150 g_message("PURPLE_PLUGINS_SKIP environment variable set, skipping "
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
151 "normal Pidgin plugin paths");
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
152 } else {
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
153 gchar *path = g_build_filename(purple_data_dir(), "plugins", NULL);
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
154
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
155 if(!g_file_test(path, G_FILE_TEST_IS_DIR)) {
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
156 g_mkdir(path, S_IRUSR | S_IWUSR | S_IXUSR);
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
157 }
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
158
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
159 gplugin_manager_append_path(manager, path);
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
160 g_free(path);
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
161
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
162 gplugin_manager_append_path(manager, PIDGIN_LIBDIR);
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
163 }
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
164
41651
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
165 g_signal_connect(manager, "loaded-plugin",
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
166 G_CALLBACK(pidgin_application_plugin_state_changed), NULL);
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
167 g_signal_connect(manager, "load-plugin-failed",
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
168 G_CALLBACK(pidgin_application_plugin_state_changed), NULL);
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
169 g_signal_connect(manager, "unloaded-plugin",
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
170 G_CALLBACK(pidgin_application_plugin_state_changed), NULL);
41656
da54a3c1e468 Fix typo in signal name
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41651
diff changeset
171 g_signal_connect(manager, "unload-plugin-failed",
41651
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
172 G_CALLBACK(pidgin_application_plugin_state_changed), NULL);
eba22f6af173 Save loaded plugin state when they are loaded/unloaded
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41634
diff changeset
173
41169
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
174 purple_plugins_refresh();
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
175 }
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
176
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
177 static void
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
178 pidgin_application_populate_dynamic_menus(PidginApplication *application) {
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41454
diff changeset
179 GMenu *target = NULL;
41315
1c9f47bbc031 Replace PidginAccountsDisabledMenu with PidginInactiveAccountsMenu which is a GMenuModel subclass.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
180 GMenuModel *model = NULL;
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
181
41450
ce81f2bc04ca Rename PidginInactiveAccountsMenu to PidginAccountsDisabledMenu to match PidginAccountsEnabledMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41441
diff changeset
182 /* Link the AccountsDisabledMenu into its proper location. */
ce81f2bc04ca Rename PidginInactiveAccountsMenu to PidginAccountsDisabledMenu to match PidginAccountsEnabledMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41441
diff changeset
183 model = pidgin_accounts_disabled_menu_new();
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
184 target = gtk_application_get_menu_by_id(GTK_APPLICATION(application),
41450
ce81f2bc04ca Rename PidginInactiveAccountsMenu to PidginAccountsDisabledMenu to match PidginAccountsEnabledMenu
Gary Kramlich <grim@reaperworld.com>
parents: 41441
diff changeset
185 "disabled-accounts");
41315
1c9f47bbc031 Replace PidginAccountsDisabledMenu with PidginInactiveAccountsMenu which is a GMenuModel subclass.
Gary Kramlich <grim@reaperworld.com>
parents: 41314
diff changeset
186 g_menu_append_section(target, NULL, model);
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
187
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
188 /* Link the AccountsEnabledMenu into its proper location. */
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41454
diff changeset
189 model = pidgin_accounts_enabled_menu_new();
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
190 target = gtk_application_get_menu_by_id(GTK_APPLICATION(application),
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
191 "enabled-accounts");
41457
f0e7534a555d Convert PidginAccountsEnabledMenu from a menu controller to a GMenuModel
Gary Kramlich <grim@reaperworld.com>
parents: 41454
diff changeset
192 g_menu_append_section(target, NULL, model);
41414
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41396
diff changeset
193
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41396
diff changeset
194 /* Link the PluginsMenu into its proper location. */
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41396
diff changeset
195 model = pidgin_plugins_menu_new();
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41396
diff changeset
196 target = gtk_application_get_menu_by_id(GTK_APPLICATION(application),
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41396
diff changeset
197 "plugins-menu");
b76bc2b4d7cc Convert plugin actions to GMenu and GAction
Gary Kramlich <grim@reaperworld.com>
parents: 41396
diff changeset
198 g_menu_append_section(target, NULL, model);
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
199 }
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
200
41169
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
201 /******************************************************************************
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
202 * Actions
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
203 *****************************************************************************/
41479
3d2e114380f6 Add source files to GObject introspection
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41457
diff changeset
204 /*< private >
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
205 * pidgin_application_online_actions:
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
206 *
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
207 * This list keeps track of which actions should only be enabled while online.
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
208 */
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
209 static const gchar *pidgin_application_online_actions[] = {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
210 };
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
211
42377
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
212 /**
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
213 * pidgin_application_channel_actions: (skip)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
214 *
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
215 * This list keeps track of which actions should only be enabled if a protocol
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
216 * supporting channels is connected.
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
217 */
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
218 static const gchar *pidgin_application_channel_actions[] = {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
219 "join-channel",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
220 };
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
221
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
222 /**
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
223 * pidgin_action_group_actions_set_enable: (skip)
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
224 * @group: The #PidginActionGroup instance.
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
225 * @actions: The action names.
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
226 * @n_actions: The number of @actions.
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
227 * @enabled: Whether or not to enable the actions.
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
228 *
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
229 * Sets the enabled property of the named actions to @enabled.
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
230 */
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
231 static void
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
232 pidgin_application_actions_set_enabled(PidginApplication *application,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
233 const gchar *const *actions,
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
234 guint n_actions,
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
235 gboolean enabled)
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
236 {
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
237 guint i = 0;
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
238
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
239 for(i = 0; i < n_actions; i++) {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
240 GAction *action = NULL;
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
241 const gchar *name = actions[i];
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
242
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
243 action = g_action_map_lookup_action(G_ACTION_MAP(application), name);
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
244
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
245 if(action != NULL) {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
246 g_simple_action_set_enabled(G_SIMPLE_ACTION(action), enabled);
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
247 } else {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
248 g_warning("Failed to find action named %s", name);
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
249 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
250 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
251 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
252
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
253 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
254 pidgin_application_about(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
255 G_GNUC_UNUSED GVariant *parameter, gpointer data)
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
256 {
41708
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
257 PidginApplication *application = data;
41307
685bab46fad2 Move the singleton handling of the about dialog to the action handler.
Gary Kramlich <grim@reaperworld.com>
parents: 41306
diff changeset
258 static GtkWidget *about = NULL;
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
259
41307
685bab46fad2 Move the singleton handling of the about dialog to the action handler.
Gary Kramlich <grim@reaperworld.com>
parents: 41306
diff changeset
260 if(!GTK_IS_WIDGET(about)) {
685bab46fad2 Move the singleton handling of the about dialog to the action handler.
Gary Kramlich <grim@reaperworld.com>
parents: 41306
diff changeset
261 about = pidgin_about_dialog_new();
685bab46fad2 Move the singleton handling of the about dialog to the action handler.
Gary Kramlich <grim@reaperworld.com>
parents: 41306
diff changeset
262 g_object_add_weak_pointer(G_OBJECT(about), (gpointer)&about);
685bab46fad2 Move the singleton handling of the about dialog to the action handler.
Gary Kramlich <grim@reaperworld.com>
parents: 41306
diff changeset
263 }
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
264
41708
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
265 pidgin_application_present_transient_window(application, GTK_WINDOW(about));
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
266 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
267
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
268 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
269 pidgin_application_accounts(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
270 G_GNUC_UNUSED GVariant *parameter, gpointer data)
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
271 {
41708
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
272 PidginApplication *application = data;
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
273 GtkWidget *manager = pidgin_application_get_account_manager();
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents: 41307
diff changeset
274
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
275 pidgin_account_manager_show_overview(PIDGIN_ACCOUNT_MANAGER(manager));
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents: 41307
diff changeset
276
41708
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
277 pidgin_application_present_transient_window(application,
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
278 GTK_WINDOW(manager));
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
279 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
280
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
281 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
282 pidgin_application_connect_account(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
283 GVariant *parameter,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
284 G_GNUC_UNUSED gpointer data)
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
285 {
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
286 PurpleAccount *account = NULL;
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
287 PurpleAccountManager *manager = NULL;
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
288 const gchar *id = NULL;
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
289
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
290 id = g_variant_get_string(parameter, NULL);
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
291
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
292 manager = purple_account_manager_get_default();
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
293
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
294 account = purple_account_manager_find_by_id(manager, id);
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
295 if(PURPLE_IS_ACCOUNT(account)) {
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
296 purple_account_connect(account);
42291
a86b7bcbb471 Make the purple_account_manager_find functions return transfer full.
Gary Kramlich <grim@reaperworld.com>
parents: 42163
diff changeset
297 g_clear_object(&account);
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
298 }
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
299 }
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
300
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
301 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
302 pidgin_application_debug(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
303 G_GNUC_UNUSED GVariant *parameter,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
304 G_GNUC_UNUSED gpointer data)
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
305 {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
306 gboolean old = purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled");
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
307 purple_prefs_set_bool(PIDGIN_PREFS_ROOT "/debug/enabled", !old);
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
308 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
309
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
310
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
311 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
312 pidgin_application_disable_account(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
313 GVariant *parameter,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
314 G_GNUC_UNUSED gpointer data)
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
315 {
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
316 PurpleAccount *account = NULL;
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
317 PurpleAccountManager *manager = NULL;
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
318 const gchar *id = NULL;
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
319
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
320 id = g_variant_get_string(parameter, NULL);
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
321
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
322 manager = purple_account_manager_get_default();
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
323
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
324 account = purple_account_manager_find_by_id(manager, id);
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
325 if(PURPLE_IS_ACCOUNT(account)) {
41392
b5c84f55d5d2 Remove the ui parameter from purple_account_[gs]et_enabled
Gary Kramlich <grim@reaperworld.com>
parents: 41354
diff changeset
326 if(purple_account_get_enabled(account)) {
b5c84f55d5d2 Remove the ui parameter from purple_account_[gs]et_enabled
Gary Kramlich <grim@reaperworld.com>
parents: 41354
diff changeset
327 purple_account_set_enabled(account, FALSE);
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
328 }
42291
a86b7bcbb471 Make the purple_account_manager_find functions return transfer full.
Gary Kramlich <grim@reaperworld.com>
parents: 42163
diff changeset
329
a86b7bcbb471 Make the purple_account_manager_find functions return transfer full.
Gary Kramlich <grim@reaperworld.com>
parents: 42163
diff changeset
330 g_clear_object(&account);
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
331 }
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
332 }
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
333
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
334 static void
41932
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
335 pidgin_application_donate(G_GNUC_UNUSED GSimpleAction *simple,
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
336 G_GNUC_UNUSED GVariant *parameter,
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
337 G_GNUC_UNUSED gpointer data)
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
338 {
42746
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
339 GtkUriLauncher *launcher = NULL;
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
340
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
341 launcher = gtk_uri_launcher_new("https://www.imfreedom.org/donate/");
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
342 gtk_uri_launcher_launch(launcher, NULL, NULL, NULL, NULL);
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
343 g_clear_object(&launcher);
41932
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
344 }
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
345
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
346 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
347 pidgin_application_edit_account(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
348 GVariant *parameter, gpointer data)
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
349 {
41708
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
350 PidginApplication *application = data;
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
351 PurpleAccount *account = NULL;
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
352 PurpleAccountManager *manager = NULL;
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
353 const gchar *id = NULL;
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
354
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
355 if(!g_variant_is_of_type(parameter, G_VARIANT_TYPE_STRING)) {
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
356 g_warning("parameter is of type %s, expected %s",
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
357 g_variant_get_type_string(parameter),
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
358 (char *)G_VARIANT_TYPE_STRING);
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
359
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
360 return;
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
361 }
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
362
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
363 id = g_variant_get_string(parameter, NULL);
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
364
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
365 manager = purple_account_manager_get_default();
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
366
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
367 account = purple_account_manager_find_by_id(manager, id);
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
368 if(PURPLE_IS_ACCOUNT(account)) {
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
369 GtkWidget *account_manager = pidgin_application_get_account_manager();
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
370
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
371 pidgin_account_manager_edit_account(PIDGIN_ACCOUNT_MANAGER(account_manager),
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
372 account);
41708
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
373
ab84e1ca8935 Make a bunch of windows transient and use gtk_window_present_with_time instead of just gtk_widget_show
Gary Kramlich <grim@reaperworld.com>
parents: 41702
diff changeset
374 pidgin_application_present_transient_window(application,
42151
41b9c5be8965 Embed PidginAccountEditor into PidginAccountManager
Gary Kramlich <grim@reaperworld.com>
parents: 42072
diff changeset
375 GTK_WINDOW(account_manager));
42291
a86b7bcbb471 Make the purple_account_manager_find functions return transfer full.
Gary Kramlich <grim@reaperworld.com>
parents: 42163
diff changeset
376
a86b7bcbb471 Make the purple_account_manager_find functions return transfer full.
Gary Kramlich <grim@reaperworld.com>
parents: 42163
diff changeset
377 g_clear_object(&account);
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
378 }
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
379 }
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
380
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
381 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
382 pidgin_application_enable_account(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
383 GVariant *parameter,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
384 G_GNUC_UNUSED gpointer data)
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
385 {
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
386 PurpleAccount *account = NULL;
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
387 PurpleAccountManager *manager = NULL;
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
388 const gchar *id = NULL;
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
389
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
390 id = g_variant_get_string(parameter, NULL);
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
391
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
392 manager = purple_account_manager_get_default();
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
393
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
394 account = purple_account_manager_find_by_id(manager, id);
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
395 if(PURPLE_IS_ACCOUNT(account)) {
41392
b5c84f55d5d2 Remove the ui parameter from purple_account_[gs]et_enabled
Gary Kramlich <grim@reaperworld.com>
parents: 41354
diff changeset
396 if(!purple_account_get_enabled(account)) {
b5c84f55d5d2 Remove the ui parameter from purple_account_[gs]et_enabled
Gary Kramlich <grim@reaperworld.com>
parents: 41354
diff changeset
397 purple_account_set_enabled(account, TRUE);
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
398 }
42291
a86b7bcbb471 Make the purple_account_manager_find functions return transfer full.
Gary Kramlich <grim@reaperworld.com>
parents: 42163
diff changeset
399
a86b7bcbb471 Make the purple_account_manager_find functions return transfer full.
Gary Kramlich <grim@reaperworld.com>
parents: 42163
diff changeset
400 g_clear_object(&account);
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
401 }
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
402 }
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
403
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
404 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
405 pidgin_application_file_transfers(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
406 G_GNUC_UNUSED GVariant *parameter,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
407 G_GNUC_UNUSED gpointer data)
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
408 {
42517
9d1bf2e19825 Remove the old gtk file transfer stuff
Gary Kramlich <grim@reaperworld.com>
parents: 42512
diff changeset
409 g_warning("sorry not yet ported...");
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
410 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
411
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
412 static void
42377
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
413 pidgin_application_join_channel(G_GNUC_UNUSED GSimpleAction *simple,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
414 G_GNUC_UNUSED GVariant *parameter,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
415 gpointer data)
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
416 {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
417 PidginApplication *application = data;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
418 static GtkWidget *dialog = NULL;
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
419
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
420 if(!GTK_IS_WIDGET(dialog)) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
421 dialog = pidgin_channel_join_dialog_new();
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
422 g_object_add_weak_pointer(G_OBJECT(dialog), (gpointer)&dialog);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
423 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
424
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
425 pidgin_application_present_transient_window(application,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
426 GTK_WINDOW(dialog));
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
427 }
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
428
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
429 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
430 pidgin_application_online_help(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
431 G_GNUC_UNUSED GVariant *parameter,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
432 G_GNUC_UNUSED gpointer data)
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
433 {
42746
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
434 GtkUriLauncher *launcher = NULL;
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
435
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
436 launcher = gtk_uri_launcher_new(PURPLE_WEBSITE "help");
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
437 gtk_uri_launcher_launch(launcher, NULL, NULL, NULL, NULL);
bd2da74b9201 Use GtkUriLauncher directly in Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42739
diff changeset
438 g_clear_object(&launcher);
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
439 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
440
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
441 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
442 pidgin_application_preferences(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
443 G_GNUC_UNUSED GVariant *parameter,
42072
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
444 gpointer data)
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
445 {
42072
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
446 PidginApplication *application = data;
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
447 static GtkWidget *preferences = NULL;
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
448
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
449 if(!GTK_IS_WIDGET(preferences)) {
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
450 preferences = g_object_new(PIDGIN_TYPE_PREFS_WINDOW, NULL);
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
451 g_object_add_weak_pointer(G_OBJECT(preferences), (gpointer)&preferences);
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
452 }
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
453
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
454 pidgin_application_present_transient_window(application,
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
455 GTK_WINDOW(preferences));
606edc665dc2 Display the preferences window as a singleton from the application
Gary Kramlich <grim@reaperworld.com>
parents: 42061
diff changeset
456
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
457 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
458
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
459 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
460 pidgin_application_quit(G_GNUC_UNUSED GSimpleAction *simple,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
461 G_GNUC_UNUSED GVariant *parameter,
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
462 G_GNUC_UNUSED gpointer data)
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
463 {
41853
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
464 GPluginManager *manager = NULL;
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
465
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
466 /* Remove the signal handlers for plugin state changing so we don't try to
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
467 * update preferences.
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
468 */
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
469 manager = gplugin_manager_get_default();
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
470 g_signal_handlers_disconnect_by_func(manager,
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
471 pidgin_application_plugin_state_changed,
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
472 NULL);
d5fe1ee0efae Disconnect the plugin state signals before we tell the core to shutdown
Gary Kramlich <grim@reaperworld.com>
parents: 41748
diff changeset
473
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
474 purple_core_quit();
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
475 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
476
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
477 static GActionEntry app_entries[] = {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
478 {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
479 .name = "about",
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
480 .activate = pidgin_application_about,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
481 }, {
41441
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
482 .name = "connect-account",
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
483 .activate = pidgin_application_connect_account,
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
484 .parameter_type = "s",
e114ed471a1e Implement the UI for the new Notifications API.
Gary Kramlich <grim@reaperworld.com>
parents: 41416
diff changeset
485 }, {
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
486 .name = "debug",
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
487 .activate = pidgin_application_debug,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
488 }, {
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
489 .name = "disable-account",
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
490 .activate = pidgin_application_disable_account,
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
491 .parameter_type = "s",
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
492 }, {
41932
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
493 .name = "donate",
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
494 .activate = pidgin_application_donate,
0c3de459b1cc Add a donate link under the help menu and move the debug window item to the tools menu
Gary Kramlich <grim@reaperworld.com>
parents: 41872
diff changeset
495 }, {
41304
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
496 .name = "edit-account",
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
497 .activate = pidgin_application_edit_account,
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
498 .parameter_type = "s",
25830cad9bfc Add a menu controller for the accounts enabled section of the accounts menu
Gary Kramlich <grim@reaperworld.com>
parents: 41303
diff changeset
499 }, {
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
500 .name = "enable-account",
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
501 .activate = pidgin_application_enable_account,
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
502 .parameter_type = "s",
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
503 }, {
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
504 .name = "file-transfers",
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
505 .activate = pidgin_application_file_transfers,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
506 }, {
42377
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
507 .name = "join-channel",
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
508 .activate = pidgin_application_join_channel,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
509 }, {
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
510 .name = "manage-accounts",
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
511 .activate = pidgin_application_accounts,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
512 }, {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
513 .name = "online-help",
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
514 .activate = pidgin_application_online_help,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
515 }, {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
516 .name = "preferences",
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
517 .activate = pidgin_application_preferences,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
518 }, {
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
519 .name = "quit",
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
520 .activate = pidgin_application_quit,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
521 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
522 };
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
523
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
524 /******************************************************************************
42561
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
525 * Shortcuts
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
526 *****************************************************************************/
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
527 static inline void
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
528 pidgin_application_add_shortcut(PidginApplication *application,
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
529 const char *action,
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
530 const char *accelerator)
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
531 {
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
532 const char *accels[] = {accelerator, NULL};
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
533
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
534 gtk_application_set_accels_for_action(GTK_APPLICATION(application),
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
535 action, accels);
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
536 }
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
537
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
538 static void
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
539 pidgin_application_add_shortcuts(PidginApplication *application) {
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
540 pidgin_application_add_shortcut(application, "app.file-transfers",
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
541 "<Primary>T");
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
542 pidgin_application_add_shortcut(application, "app.get-user-info",
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
543 "<Primary>I");
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
544 pidgin_application_add_shortcut(application, "app.manage-accounts",
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
545 "<Primary>S");
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
546 pidgin_application_add_shortcut(application, "app.manage-plugins",
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
547 "<Primary>U");
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
548 pidgin_application_add_shortcut(application, "app.new-message",
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
549 "<Primary>M");
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
550 pidgin_application_add_shortcut(application, "app.preferences",
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
551 "<Primary>comma");
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
552 pidgin_application_add_shortcut(application, "app.quit", "<Primary>Q");
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
553 }
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
554
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
555 /******************************************************************************
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
556 * Purple Signal Callbacks
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
557 *****************************************************************************/
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
558 static void
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
559 pidgin_application_connected_cb(G_GNUC_UNUSED PurpleAccountManager *manager,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
560 PurpleAccount *account,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
561 gpointer data)
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
562 {
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
563 PidginApplication *application = data;
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
564 PurpleProtocol *protocol = NULL;
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
565 gboolean should_enable_channel = FALSE;
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
566 guint n_actions = 0;
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
567
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
568 n_actions = G_N_ELEMENTS(pidgin_application_online_actions);
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
569 pidgin_application_actions_set_enabled(PIDGIN_APPLICATION(data),
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
570 pidgin_application_online_actions,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
571 n_actions,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
572 TRUE);
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
573
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
574 /* Now figure out what menus items should be enabled. */
40803
0e11ce1049b2 Port Pidgin from purple_protocols to PurpleProtocolManager
Gary Kramlich <grim@reaperworld.com>
parents: 40683
diff changeset
575 protocol = purple_account_get_protocol(account);
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
576
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
577 /* We assume that the current state is correct, so we don't bother changing
42558
05f7fd3db190 Remove some left over code for enabling and disabling actions that is no longer necessary
Gary Kramlich <grim@reaperworld.com>
parents: 42551
diff changeset
578 * state unless the newly connected account implements the channel virtual
05f7fd3db190 Remove some left over code for enabling and disabling actions that is no longer necessary
Gary Kramlich <grim@reaperworld.com>
parents: 42551
diff changeset
579 * functions, which would cause a state change.
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
580 */
42377
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
581 should_enable_channel = PURPLE_PROTOCOL_IMPLEMENTS(protocol, CONVERSATION,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
582 get_channel_join_details);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
583 if(should_enable_channel) {
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
584 n_actions = G_N_ELEMENTS(pidgin_application_channel_actions);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
585 pidgin_application_actions_set_enabled(application,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
586 pidgin_application_channel_actions,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
587 n_actions,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
588 TRUE);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
589 }
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
590 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
591
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
592 static void
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
593 pidgin_application_disconnected_cb(PurpleAccountManager *manager,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
594 G_GNUC_UNUSED PurpleAccount *account,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
595 gpointer data)
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
596 {
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
597 PidginApplication *application = data;
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
598 GList *connected = NULL;
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
599 gboolean should_disable_actions = TRUE;
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
600 gboolean should_disable_channel = TRUE;
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
601 guint n_actions = 0;
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
602
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
603 connected = purple_account_manager_get_connected(manager);
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
604
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
605 while(connected != NULL) {
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
606 PurpleAccount *account = connected->data;
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
607 PurpleProtocol *protocol = NULL;
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
608
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
609 /* We have at least one account connected so we're online. */
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
610 should_disable_actions = FALSE;
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
611
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
612 protocol = purple_account_get_protocol(account);
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
613
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
614 /* Check if the protocol implements joining channels. */
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
615 if(PURPLE_PROTOCOL_IMPLEMENTS(protocol, CONVERSATION,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
616 get_channel_join_details))
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
617 {
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
618 should_disable_channel = FALSE;
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
619 }
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
620
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
621 /* If we can't disable anything we can exit the loop early. */
42718
b87a01be99af Remove the roomlist from Pidgin
Gary Kramlich <grim@reaperworld.com>
parents: 42712
diff changeset
622 if(!should_disable_channel) {
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
623 g_clear_list(&connected, NULL);
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
624
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
625 break;
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
626 }
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
627
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
628 connected = g_list_delete_link(connected, connected);
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
629 }
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
630
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
631 if(should_disable_actions) {
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
632 n_actions = G_N_ELEMENTS(pidgin_application_online_actions);
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
633 pidgin_application_actions_set_enabled(PIDGIN_APPLICATION(data),
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
634 pidgin_application_online_actions,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
635 n_actions,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
636 FALSE);
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
637 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
638
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
639 if(should_disable_channel) {
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
640 n_actions = G_N_ELEMENTS(pidgin_application_channel_actions);
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
641 pidgin_application_actions_set_enabled(application,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
642 pidgin_application_channel_actions,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
643 n_actions,
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
644 FALSE);
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
645 }
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
646 }
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
647
41872
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
648 static void
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
649 pidgin_application_error_reponse_cb(G_GNUC_UNUSED AdwMessageDialog *self,
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
650 G_GNUC_UNUSED char *response,
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
651 gpointer data)
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
652 {
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
653 g_application_quit(data);
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
654 }
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
655
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
656 /******************************************************************************
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
657 * GtkApplication Implementation
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
658 *****************************************************************************/
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
659 static void
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
660 pidgin_application_window_added(GtkApplication *application,
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
661 GtkWindow *window)
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
662 {
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
663 PidginApplication *pidgin_application = PIDGIN_APPLICATION(application);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
664 GHashTableIter iter;
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
665 gpointer key, value;
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
666
41354
ba08026458f4 Chain up to the parent class's implementation of the window_added default signal handler
Gary Kramlich <grim@reaperworld.com>
parents: 41353
diff changeset
667 GTK_APPLICATION_CLASS(pidgin_application_parent_class)->window_added(application,
ba08026458f4 Chain up to the parent class's implementation of the window_added default signal handler
Gary Kramlich <grim@reaperworld.com>
parents: 41353
diff changeset
668 window);
ba08026458f4 Chain up to the parent class's implementation of the window_added default signal handler
Gary Kramlich <grim@reaperworld.com>
parents: 41353
diff changeset
669
41695
6032b86cb76b Add devel CSS to application windows
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41689
diff changeset
670 if(strstr(VERSION, "-devel")) {
6032b86cb76b Add devel CSS to application windows
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41689
diff changeset
671 gtk_widget_add_css_class(GTK_WIDGET(window), "devel");
6032b86cb76b Add devel CSS to application windows
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41689
diff changeset
672 }
6032b86cb76b Add devel CSS to application windows
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41689
diff changeset
673
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
674 g_hash_table_iter_init(&iter, pidgin_application->action_groups);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
675 while(g_hash_table_iter_next(&iter, &key, &value)) {
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
676 GActionGroup *action_group = value;
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
677 gchar *prefix = key;
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
678
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
679 gtk_widget_insert_action_group(GTK_WIDGET(window), prefix,
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
680 action_group);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
681 }
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
682 }
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
683
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
684 /******************************************************************************
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
685 * GApplication Implementation
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
686 *****************************************************************************/
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
687 static void
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
688 pidgin_application_startup(GApplication *application) {
41209
909561f42b1f port Pidgin to the new PurpleAccountManager api
Gary Kramlich <grim@reaperworld.com>
parents: 41169
diff changeset
689 PurpleAccountManager *manager = NULL;
41868
e69cbf7921ec Add an out parameter for an error to purple_core_init
Gary Kramlich <grim@reaperworld.com>
parents: 41867
diff changeset
690 GError *error = NULL;
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
691 GList *active_accounts = NULL;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
692
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
693 G_APPLICATION_CLASS(pidgin_application_parent_class)->startup(application);
41524
f0a68067cff5 Update PidginApplication for the changes in GTK4
Gary Kramlich <grim@reaperworld.com>
parents: 41520
diff changeset
694
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
695 /* set a user-specified config directory */
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
696 if (opt_config_dir_arg != NULL) {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
697 if (g_path_is_absolute(opt_config_dir_arg)) {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
698 purple_util_set_user_dir(opt_config_dir_arg);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
699 } else {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
700 /* Make an absolute (if not canonical) path */
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
701 gchar *cwd = g_get_current_dir();
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
702 gchar *path = g_build_filename(cwd, opt_config_dir_arg, NULL);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
703
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
704 purple_util_set_user_dir(path);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
705
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
706 g_free(cwd);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
707 g_free(path);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
708 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
709 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
710
41117
6dc7e403f8f2 Initialize Pidgin GLib logging handler earlier
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41106
diff changeset
711 pidgin_debug_init_handler();
41127
cd297cfc56f3 Move debug command-line option to the UIs
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41117
diff changeset
712 #ifdef DEBUG
cd297cfc56f3 Move debug command-line option to the UIs
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41117
diff changeset
713 pidgin_debug_set_print_enabled(TRUE);
41336
844484fb31aa The debug command line option does not actually take an argument.
Stu Tomlinson <stu@nosnilmot.com>
parents: 41320
diff changeset
714 #else
844484fb31aa The debug command line option does not actually take an argument.
Stu Tomlinson <stu@nosnilmot.com>
parents: 41320
diff changeset
715 pidgin_debug_set_print_enabled(opt_debug);
41127
cd297cfc56f3 Move debug command-line option to the UIs
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41117
diff changeset
716 #endif
41117
6dc7e403f8f2 Initialize Pidgin GLib logging handler earlier
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41106
diff changeset
717
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
718 #ifdef _WIN32
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
719 winpidgin_init();
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
720 #endif
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
721
41868
e69cbf7921ec Add an out parameter for an error to purple_core_init
Gary Kramlich <grim@reaperworld.com>
parents: 41867
diff changeset
722 if(!purple_core_init(pidgin_ui_new(), &error)) {
41872
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
723 GtkWidget *message = NULL;
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
724 const char *error_message = "unknown error";
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
725
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
726 if(error != NULL) {
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
727 error_message = error->message;
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
728 }
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
729
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
730 message = adw_message_dialog_new(NULL,
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
731 _("Pidgin 3 failed to initialize"),
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
732 error_message);
41868
e69cbf7921ec Add an out parameter for an error to purple_core_init
Gary Kramlich <grim@reaperworld.com>
parents: 41867
diff changeset
733 g_clear_error(&error);
41872
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
734
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
735 adw_message_dialog_add_responses(ADW_MESSAGE_DIALOG(message),
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
736 "close", _("Close"), NULL);
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
737 adw_message_dialog_set_close_response(ADW_MESSAGE_DIALOG(message),
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
738 "close");
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
739
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
740 g_signal_connect(message, "response",
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
741 G_CALLBACK(pidgin_application_error_reponse_cb),
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
742 application);
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
743
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
744 gtk_window_present_with_time(GTK_WINDOW(message), GDK_CURRENT_TIME);
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
745
b405b4eb38fa Display a dialog in Pidgin if purple_core_init returned FALSE
Gary Kramlich <grim@reaperworld.com>
parents: 41868
diff changeset
746 return;
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
747 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
748
41169
4103b3869912 Upgrade to gplugin 0.37.0
Gary Kramlich <grim@reaperworld.com>
parents: 41134
diff changeset
749 pidgin_application_init_plugins();
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
750
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
751 /* load plugins we had when we quit */
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
752 purple_plugins_load_saved(PIDGIN_PREFS_ROOT "/plugins/loaded");
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
753
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
754 gtk_window_set_default_icon_name("pidgin");
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
755
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
756 g_free(opt_config_dir_arg);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
757 opt_config_dir_arg = NULL;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
758
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
759 if(purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")) {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
760 pidgin_debug_window_show();
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
761 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
762
42647
b6c3acaddc83 Replace purple_accounts_restore_statuses with purple_account_manager_set_online
Gary Kramlich <grim@reaperworld.com>
parents: 42620
diff changeset
763 manager = purple_account_manager_get_default();
b6c3acaddc83 Replace purple_accounts_restore_statuses with purple_account_manager_set_online
Gary Kramlich <grim@reaperworld.com>
parents: 42620
diff changeset
764
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
765 if(opt_nologin) {
42704
ffc82edcdbfe Don't set saved statuses during startup
Gary Kramlich <grim@reaperworld.com>
parents: 42647
diff changeset
766 purple_account_manager_set_online(manager, FALSE);
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
767 } else {
42647
b6c3acaddc83 Replace purple_accounts_restore_statuses with purple_account_manager_set_online
Gary Kramlich <grim@reaperworld.com>
parents: 42620
diff changeset
768 purple_account_manager_set_online(manager, TRUE);
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
769 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
770
41454
7cc69bde919d Update pidgin for the purple_account_manager_get_(in)active deprecations
Gary Kramlich <grim@reaperworld.com>
parents: 41450
diff changeset
771 active_accounts = purple_account_manager_get_enabled(manager);
41209
909561f42b1f port Pidgin to the new PurpleAccountManager api
Gary Kramlich <grim@reaperworld.com>
parents: 41169
diff changeset
772 if(active_accounts == NULL) {
41310
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents: 41307
diff changeset
773 g_action_group_activate_action(G_ACTION_GROUP(application),
53e4815ef254 Create a new PidginAccountManager that replaces the manually built one.
Gary Kramlich <grim@reaperworld.com>
parents: 41307
diff changeset
774 "manage-accounts", NULL);
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
775 } else {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
776 g_list_free(active_accounts);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
777 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
778
41298
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
779 /* Populate our dynamic menus. */
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
780 pidgin_application_populate_dynamic_menus(PIDGIN_APPLICATION(application));
6d816e02fd76 Create a menu controller that will keep a GMenu in sync with the disabled accounts in libpurple
Gary Kramlich <grim@reaperworld.com>
parents: 41246
diff changeset
781
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
782 /* Connect to the connected and disconnected signals to manage which menus
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
783 * are active.
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
784 */
42512
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
785 g_signal_connect_object(manager, "account-connected",
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
786 G_CALLBACK(pidgin_application_connected_cb),
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
787 application, 0);
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
788 g_signal_connect_object(manager, "account-disconnected",
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
789 G_CALLBACK(pidgin_application_disconnected_cb),
0f4010978378 Use the AccountManager's signals to control the sensitivity of the menus
Gary Kramlich <grim@reaperworld.com>
parents: 42508
diff changeset
790 application, 0);
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
791 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
792
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
793 static void
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
794 pidgin_application_activate(G_GNUC_UNUSED GApplication *application) {
41696
35f8ce475b21 Rename PidginConversationWindow to PidginDisplayWindow as it holds more than conversations now
Gary Kramlich <grim@reaperworld.com>
parents: 41695
diff changeset
795 GtkWidget *convwin = pidgin_display_window_get_default();
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
796
41246
d2a2cc448987 Stop reaching into the PidginBuddyList struct from other files
Gary Kramlich <grim@reaperworld.com>
parents: 41234
diff changeset
797 if(GTK_IS_WINDOW(convwin)) {
d2a2cc448987 Stop reaching into the PidginBuddyList struct from other files
Gary Kramlich <grim@reaperworld.com>
parents: 41234
diff changeset
798 gtk_window_present(GTK_WINDOW(convwin));
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
799 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
800 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
801
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
802 static gint
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
803 pidgin_application_command_line(GApplication *application,
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
804 GApplicationCommandLine *cmdline)
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
805 {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
806 gchar **argv = NULL;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
807 gint argc = 0, i = 0;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
808
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
809 argv = g_application_command_line_get_arguments(cmdline, &argc);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
810
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
811 if(argc == 1) {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
812 /* No arguments, just activate */
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
813 g_application_activate(application);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
814 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
815
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
816 /* Start at 1 to skip the executable name */
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
817 for (i = 1; i < argc; i++) {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
818 purple_got_protocol_handler_uri(argv[i]);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
819 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
820
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
821 g_strfreev(argv);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
822
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
823 return 0;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
824 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
825
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
826 static gint
41947
7b3312d0760c Bump C standard to C99 for Pidgin files and fix warnings
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 41932
diff changeset
827 pidgin_application_handle_local_options(G_GNUC_UNUSED GApplication *application,
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
828 GVariantDict *options)
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
829 {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
830 if (g_variant_dict_contains(options, "version")) {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
831 printf("%s %s (libpurple %s)\n", PIDGIN_NAME, DISPLAY_VERSION,
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
832 purple_core_get_version());
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
833
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
834 return 0;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
835 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
836
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
837 return -1;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
838 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
839
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
840 /******************************************************************************
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
841 * GObject Implementation
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
842 *****************************************************************************/
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
843 static void
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
844 pidgin_application_dispose(GObject *obj) {
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
845 PidginApplication *application = PIDGIN_APPLICATION(obj);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
846
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
847 g_clear_pointer(&application->action_groups, g_hash_table_destroy);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
848
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
849 G_OBJECT_CLASS(pidgin_application_parent_class)->dispose(obj);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
850 }
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
851
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
852 static void
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
853 pidgin_application_init(PidginApplication *application) {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
854 GApplication *gapp = G_APPLICATION(application);
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
855 gboolean online = FALSE;
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
856 gint n_actions = 0;
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
857
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
858 application->action_groups = g_hash_table_new_full(g_str_hash, g_str_equal,
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
859 g_free, g_object_unref);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
860
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
861 g_application_add_main_option_entries(gapp, option_entries);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
862 g_application_add_option_group(gapp, purple_get_option_group());
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
863 g_application_add_option_group(gapp, gplugin_get_option_group());
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
864
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
865 g_action_map_add_action_entries(G_ACTION_MAP(application), app_entries,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
866 G_N_ELEMENTS(app_entries), application);
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
867
42561
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
868 pidgin_application_add_shortcuts(application);
998b44b2c5f1 Make the application wide shortcuts work again
Gary Kramlich <grim@reaperworld.com>
parents: 42558
diff changeset
869
40600
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
870 /* Set the default state for our actions to match our online state. */
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
871 online = purple_connections_is_online();
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
872
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
873 n_actions = G_N_ELEMENTS(pidgin_application_online_actions);
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
874 pidgin_application_actions_set_enabled(application,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
875 pidgin_application_online_actions,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
876 n_actions,
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
877 online);
46d10c72c137 Create a new ContactList that will eventually fully replace PidginBuddyList
Gary Kramlich <grim@reaperworld.com>
parents: 40555
diff changeset
878
42377
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
879 n_actions = G_N_ELEMENTS(pidgin_application_channel_actions);
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
880 pidgin_application_actions_set_enabled(application,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
881 pidgin_application_channel_actions,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
882 n_actions,
6e3f1f8709b5 Create a new PidginChannelJoinDialog widget
Gary Kramlich <grim@reaperworld.com>
parents: 42366
diff changeset
883 online);
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
884 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
885
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
886 static void
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
887 pidgin_application_class_init(PidginApplicationClass *klass) {
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
888 GObjectClass *obj_class = G_OBJECT_CLASS(klass);
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
889 GApplicationClass *app_class = G_APPLICATION_CLASS(klass);
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
890 GtkApplicationClass *gtk_app_class = GTK_APPLICATION_CLASS(klass);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
891
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
892 obj_class->dispose = pidgin_application_dispose;
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
893
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
894 app_class->startup = pidgin_application_startup;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
895 app_class->activate = pidgin_application_activate;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
896 app_class->command_line = pidgin_application_command_line;
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
897 app_class->handle_local_options = pidgin_application_handle_local_options;
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
898
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
899 gtk_app_class->window_added = pidgin_application_window_added;
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
900 }
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
901
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
902 /******************************************************************************
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
903 * Public API
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
904 *****************************************************************************/
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
905 GApplication *
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
906 pidgin_application_new(void) {
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
907 return g_object_new(
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
908 PIDGIN_TYPE_APPLICATION,
40607
807f0b114d36 Add an application ID to Pidgin.
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents: 40600
diff changeset
909 "application-id", "im.pidgin.Pidgin3",
40553
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
910 "flags", G_APPLICATION_CAN_OVERRIDE_APP_ID |
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
911 G_APPLICATION_HANDLES_COMMAND_LINE,
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
912 "register-session", TRUE,
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
913 NULL);
892459990bb7 Create a proper GtkApplication subclass for Pidgin and use it.
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
914 }
41353
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
915
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
916 void
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
917 pidgin_application_add_action_group(PidginApplication *application,
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
918 const gchar *prefix,
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
919 GActionGroup *action_group)
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
920 {
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
921 GList *windows = NULL;
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
922
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
923 g_return_if_fail(prefix != NULL);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
924
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
925 if(G_IS_ACTION_GROUP(action_group)) {
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
926 /* If action_group is valid, we need to create new references to the
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
927 * prefix and action_group when inserting them into the hash table.
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
928 */
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
929 g_hash_table_insert(application->action_groups, g_strdup(prefix),
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
930 g_object_ref(action_group));
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
931 } else {
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
932 g_hash_table_remove(application->action_groups, prefix);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
933 }
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
934
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
935 /* Now walk through the windows and add/remove the action group. */
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
936 windows = gtk_application_get_windows(GTK_APPLICATION(application));
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
937 while(windows != NULL) {
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
938 GtkWidget *window = GTK_WIDGET(windows->data);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
939
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
940 gtk_widget_insert_action_group(window, prefix, action_group);
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
941
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
942 windows = windows->next;
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
943 }
2b364a6512cc Make PidginApplication manage action groups for all windows
Gary Kramlich <grim@reaperworld.com>
parents: 41336
diff changeset
944 }
41748
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
945
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
946 GtkWindow *
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
947 pidgin_application_get_active_window(PidginApplication *application) {
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
948 GtkApplication *gtk_application = NULL;
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
949 GtkWindow *window = NULL;
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
950
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
951 g_return_val_if_fail(PIDGIN_IS_APPLICATION(application), NULL);
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
952
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
953 gtk_application = GTK_APPLICATION(application);
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
954
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
955 window = gtk_application_get_active_window(gtk_application);
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
956 if(!GTK_IS_WINDOW(window)) {
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
957 GList *windows = NULL;
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
958
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
959 windows = gtk_application_get_windows(gtk_application);
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
960 if(windows != NULL) {
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
961 window = windows->data;
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
962 }
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
963 }
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
964
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
965 return window;
fb13b6986266 Make the debug window transient for whatever window created it.
Gary Kramlich <grim@reaperworld.com>
parents: 41730
diff changeset
966 }

mercurial