Mercurial > projects > package-update-indicator
annotate pui-prefs-application.c @ 64:a5ed1047ce14
Obtain network state from GNetworkMonitor
The PackageKit daemon does not necessarily run continuously and is therefore
not a reliable source for network changes. More specifically, if the internet
connectivity is not available when the PackageKit daemon shuts down,
package-update-indicator will not be notified if connectivity is restored.
Thus use GNetworkMonitor instead which is also used internally by PackageKit.
This change is based on patches by Cliff <cliffd@gmx.com.br> who discovered and
tracked down this issue.
author | Guido Berhoerster <guido+pui@berhoerster.name> |
---|---|
date | Sun, 14 Jan 2024 18:53:37 +0100 |
parents | 9cbb0f8a66c4 |
children |
rev | line source |
---|---|
1
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
1 /* |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
2 * Copyright (C) 2018 Guido Berhoerster <guido+pui@berhoerster.name> |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
3 * |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
4 * Permission is hereby granted, free of charge, to any person obtaining |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
5 * a copy of this software and associated documentation files (the |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
6 * "Software"), to deal in the Software without restriction, including |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
7 * without limitation the rights to use, copy, modify, merge, publish, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
8 * distribute, sublicense, and/or sell copies of the Software, and to |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
9 * permit persons to whom the Software is furnished to do so, subject to |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
10 * the following conditions: |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
11 * |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
12 * The above copyright notice and this permission notice shall be included |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
13 * in all copies or substantial portions of the Software. |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
14 * |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
18 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
19 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
20 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
21 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
22 */ |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
23 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
24 #include <glib/gi18n.h> |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
25 #include <gio/gio.h> |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
26 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
27 #include "pui-prefs-application.h" |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
28 #include "pui-settings.h" |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
29 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
30 #define COLUMN_REFRESH_INTERVAL 2 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
31 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
32 struct _PuiPrefsApplication { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
33 GtkApplication parent_instance; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
34 GSettings *settings; |
58
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
35 GtkWidget *update_command_entry; |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
36 GtkWidget *refresh_interval_combo_box; |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
37 GtkWidget *use_mobile_check_button; |
1
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
38 }; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
39 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
40 G_DEFINE_TYPE(PuiPrefsApplication, pui_prefs_application, GTK_TYPE_APPLICATION) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
41 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
42 static void pui_prefs_application_quit(GSimpleAction *, GVariant *, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
43 gpointer); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
44 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
45 static const GActionEntry pui_prefs_application_actions[] = { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
46 { "quit", pui_prefs_application_quit } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
47 }; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
48 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
49 static void |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
50 pui_prefs_application_quit(GSimpleAction *simple, GVariant *parameter, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
51 gpointer user_data) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
52 { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
53 PuiPrefsApplication *self = user_data; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
54 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
55 g_application_quit(G_APPLICATION(self)); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
56 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
57 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
58 static gboolean |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
59 map_refresh_interval_to_index(GValue *value, GVariant *variant, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
60 gpointer user_data) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
61 { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
62 GtkTreeModel *tree_model = user_data; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
63 guint32 setting_interval; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
64 gint index; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
65 gboolean iter_continue; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
66 GtkTreeIter iter = { 0 }; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
67 GValue model_value = G_VALUE_INIT; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
68 guint model_interval; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
69 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
70 setting_interval = g_variant_get_uint32(variant); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
71 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
72 /* try to find a matching entry in the list */ |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
73 for (iter_continue = gtk_tree_model_get_iter_first(tree_model, &iter), |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
74 index = 0; iter_continue; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
75 iter_continue = gtk_tree_model_iter_next(tree_model, &iter), |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
76 index++) { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
77 gtk_tree_model_get_value(tree_model, &iter, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
78 COLUMN_REFRESH_INTERVAL, &model_value); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
79 model_interval = g_value_get_uint(&model_value); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
80 g_value_unset(&model_value); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
81 if (setting_interval == model_interval) { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
82 g_debug("mapping refresh-interval %" G_GUINT32_FORMAT |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
83 " to index %d", setting_interval, index); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
84 g_value_set_int(value, index); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
85 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
86 return (TRUE); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
87 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
88 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
89 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
90 g_debug("mapping refresh-interval %" G_GUINT32_FORMAT " to index -1", |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
91 setting_interval); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
92 g_value_set_int(value, -1); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
93 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
94 return (TRUE); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
95 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
96 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
97 static GVariant * |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
98 map_index_to_refresh_interval(const GValue *value, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
99 const GVariantType *expected_type, gpointer user_data) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
100 { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
101 GtkTreeModel *tree_model = GTK_TREE_MODEL(user_data); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
102 gint index; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
103 GtkTreeIter iter = { 0 }; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
104 GValue model_value = G_VALUE_INIT; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
105 guint model_interval; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
106 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
107 index = g_value_get_int(value); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
108 if (!gtk_tree_model_iter_nth_child(tree_model, &iter, NULL, index)) { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
109 return (NULL); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
110 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
111 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
112 gtk_tree_model_get_value(tree_model, &iter, COLUMN_REFRESH_INTERVAL, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
113 &model_value); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
114 model_interval = g_value_get_uint(&model_value); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
115 g_debug("mapping index %d to refresh-interval value %" G_GUINT32_FORMAT, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
116 index, model_interval); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
117 g_value_unset(&model_value); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
118 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
119 return (g_variant_new_uint32(model_interval)); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
120 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
121 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
122 static void |
58
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
123 update_widgets(PuiPrefsApplication *self) |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
124 { |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
125 gchar ** disabled_preferences; |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
126 |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
127 g_return_if_fail(self->update_command_entry != NULL); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
128 g_return_if_fail(self->refresh_interval_combo_box != NULL); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
129 g_return_if_fail(self->use_mobile_check_button != NULL); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
130 |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
131 disabled_preferences = g_settings_get_strv(self->settings, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
132 "disable-preferences"); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
133 g_return_if_fail(disabled_preferences != NULL); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
134 gtk_widget_set_sensitive(self->update_command_entry, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
135 !g_strv_contains((const gchar * const *)disabled_preferences, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
136 "update-command")); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
137 gtk_widget_set_sensitive(self->refresh_interval_combo_box, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
138 !g_strv_contains((const gchar * const *)disabled_preferences, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
139 "refresh-interval")); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
140 gtk_widget_set_sensitive(self->use_mobile_check_button, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
141 !g_strv_contains((const gchar * const *)disabled_preferences, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
142 "use-mobile-connection")); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
143 g_strfreev(disabled_preferences); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
144 } |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
145 |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
146 static void |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
147 on_disable_preferences_changed(GSettings *settings, gchar *key, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
148 gpointer user_data) |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
149 { |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
150 g_debug("setting disable-preferences changed"); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
151 update_widgets(user_data); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
152 } |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
153 |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
154 static void |
1
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
155 pui_prefs_application_startup(GApplication *application) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
156 { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
157 PuiPrefsApplication *self = PUI_PREFS_APPLICATION(application); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
158 GApplicationClass *application_class = |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
159 G_APPLICATION_CLASS(pui_prefs_application_parent_class); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
160 GtkBuilder *builder; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
161 GtkWidget *window; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
162 GtkTreeModel *tree_model; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
163 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
164 application_class->startup(application); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
165 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
166 /* create actions */ |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
167 g_action_map_add_action_entries(G_ACTION_MAP(self), |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
168 pui_prefs_application_actions, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
169 G_N_ELEMENTS(pui_prefs_application_actions), self); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
170 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
171 /* get widgets from builder */ |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
172 builder = gtk_builder_new_from_resource("/org/guido-berhoerster/code/" |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
173 "package-update-indicator/preferences/pui-prefs-window.ui"); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
174 window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
175 gtk_application_add_window(GTK_APPLICATION(self), GTK_WINDOW(window)); |
58
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
176 self->update_command_entry = GTK_WIDGET(gtk_builder_get_object(builder, |
1
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
177 "update-command")); |
58
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
178 self->refresh_interval_combo_box = |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
179 GTK_WIDGET(gtk_builder_get_object(builder, "refresh-interval")); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
180 tree_model = gtk_combo_box_get_model( |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
181 GTK_COMBO_BOX(self->refresh_interval_combo_box)); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
182 self->use_mobile_check_button = |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
183 GTK_WIDGET(gtk_builder_get_object(builder, |
4
3d72ca76538d
Add setting to control whether to use a mobile connection
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
1
diff
changeset
|
184 "use-mobile-connection")); |
1
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
185 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
186 /* bind settings to widgets */ |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
187 self->settings = pui_settings_new(); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
188 g_settings_bind(self->settings, "update-command", |
58
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
189 self->update_command_entry, "text", G_SETTINGS_BIND_DEFAULT); |
1
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
190 g_settings_bind_with_mapping(self->settings, "refresh-interval", |
58
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
191 self->refresh_interval_combo_box, "active", |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
192 G_SETTINGS_BIND_DEFAULT, map_refresh_interval_to_index, |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
193 map_index_to_refresh_interval, tree_model, NULL); |
4
3d72ca76538d
Add setting to control whether to use a mobile connection
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
1
diff
changeset
|
194 g_settings_bind(self->settings, "use-mobile-connection", |
58
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
195 self->use_mobile_check_button, "active", G_SETTINGS_BIND_DEFAULT); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
196 |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
197 /* watch disable-preferences setting in order to update the window */ |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
198 g_signal_connect(self->settings, "changed::disable-preferences", |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
199 G_CALLBACK(on_disable_preferences_changed), self); |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
200 update_widgets(self); |
1
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
201 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
202 /* show window */ |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
203 gtk_widget_show(window); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
204 gtk_window_present(GTK_WINDOW(window)); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
205 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
206 g_object_unref(builder); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
207 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
208 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
209 static void |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
210 pui_prefs_application_activate(GApplication *application) { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
211 GtkApplication *gtk_application = GTK_APPLICATION(application); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
212 GApplicationClass *application_class = |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
213 G_APPLICATION_CLASS(pui_prefs_application_parent_class); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
214 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
215 /* raise window when activated */ |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
216 gtk_window_present(gtk_application_get_active_window(gtk_application)); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
217 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
218 application_class->activate(application); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
219 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
220 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
221 static void |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
222 pui_prefs_application_dispose(GObject *object) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
223 { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
224 PuiPrefsApplication *self = PUI_PREFS_APPLICATION(object); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
225 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
226 if (self->settings != NULL) { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
227 g_clear_object(&self->settings); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
228 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
229 |
58
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
230 self->update_command_entry = NULL; |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
231 self->refresh_interval_combo_box = NULL; |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
232 self->use_mobile_check_button = NULL; |
9cbb0f8a66c4
Add setting to disable preferences widgets
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
4
diff
changeset
|
233 |
1
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
234 G_OBJECT_CLASS(pui_prefs_application_parent_class)->dispose(object); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
235 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
236 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
237 static void |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
238 pui_prefs_application_class_init(PuiPrefsApplicationClass *klass) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
239 { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
240 GObjectClass *object_class = G_OBJECT_CLASS(klass); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
241 GApplicationClass *application_class = G_APPLICATION_CLASS(klass); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
242 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
243 object_class->dispose = pui_prefs_application_dispose; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
244 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
245 application_class->startup = pui_prefs_application_startup; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
246 application_class->activate = pui_prefs_application_activate; |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
247 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
248 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
249 static void |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
250 pui_prefs_application_init(PuiPrefsApplication *self) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
251 { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
252 /* do nothing, implementation required */ |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
253 } |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
254 |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
255 PuiPrefsApplication * |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
256 pui_prefs_application_new(void) |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
257 { |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
258 return (g_object_new(PUI_TYPE_PREFS_APPLICATION, |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
259 "application-id", APPLICATION_ID, NULL)); |
2f04ec9e0506
Add preferences application
Guido Berhoerster <guido+pui@berhoerster.name>
parents:
diff
changeset
|
260 } |