Mercurial > projects > pk-update-icon
annotate pkui-icon.c @ 56:63347002d746
Simplify PkuiBackend
Make the "check-interval" property construct-only since it is never changed at
runtime and schedule the first check for updates in the "constructed" method.
Remove unused property get methods.
Destroy PkClient and remove periodic check in the "dispose" method.
author | Guido Berhoerster <guido+pk-update-icon@berhoerster.name> |
---|---|
date | Sun, 01 Jul 2018 22:38:11 +0200 |
parents | b2f6b6b25703 |
children |
rev | line source |
---|---|
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
1 /* |
53
7de92a24e86c
Update email address
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
48
diff
changeset
|
2 * (C) 2011 Guido Berhoerster <guido+pk-update-icon@berhoerster.name> |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
3 * |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
4 * Licensed under the GNU General Public License Version 2 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
5 * |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
6 * This program is free software; you can redistribute it and/or modify |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
8 * the Free Software Foundation; either version 2 of the License, or |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
9 * (at your option) any later version. |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
10 * |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
11 * This program is distributed in the hope that it will be useful, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
14 * GNU General Public License for more details. |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
15 * |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
16 * You should have received a copy of the GNU General Public License |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
17 * along with this program; if not, write to the Free Software |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
19 */ |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
20 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
21 #include <glib/gi18n.h> |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
22 #include <libnotify/notify.h> |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
23 #include "pkui-backend.h" |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
24 #include "pkui-icon.h" |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
25 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
26 G_DEFINE_TYPE(PkuiIcon, pkui_icon, G_TYPE_OBJECT) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
27 |
46
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
28 #ifndef UPDATE_VIEWER_COMMAND |
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
29 #define UPDATE_VIEWER_COMMAND "" |
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
30 #endif /* UPDATE_VIEWER_COMMAND */ |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
31 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
32 #define PKUI_ICON_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), \ |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
33 PKUI_TYPE_ICON, PkuiIconPrivate)) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
34 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
35 struct _PkuiIconPrivate |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
36 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
37 PkuiBackend *backend; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
38 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
39 GtkStatusIcon *status_icon; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
40 GtkWidget *status_icon_popup_menu; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
41 NotifyNotification *notification; |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
42 gchar **update_viewer_argv; |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
43 }; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
44 |
39 | 45 static GtkWidget* icon_popup_menu_create(PkuiIcon *self); |
46 static void icon_popup_menu_popup(GtkStatusIcon *status_icon, guint button, | |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
47 guint activate_time, gpointer user_data); |
39 | 48 static void icon_activated(GtkStatusIcon *status_icon, gpointer user_data); |
49 static void hide_notification(PkuiIcon *self); | |
50 static void backend_state_changed(PkuiBackend *backend, gpointer user_data); | |
51 static void update_viewer_exited(GPid pid, gint status, gpointer user_data); | |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
52 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
53 static void |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
54 pkui_icon_finalize(GObject *gobject) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
55 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
56 PkuiIcon *self = PKUI_ICON(gobject); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
57 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
58 gtk_widget_destroy(self->priv->status_icon_popup_menu); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
59 g_object_unref(self->priv->status_icon_popup_menu); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
60 g_object_unref(self->priv->status_icon); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
61 if (self->priv->notification != NULL) { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
62 notify_notification_close(self->priv->notification, NULL); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
63 g_object_unref(self->priv->notification); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
64 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
65 g_object_unref(self->priv->backend); |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
66 g_strfreev(self->priv->update_viewer_argv); |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
67 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
68 G_OBJECT_CLASS(pkui_icon_parent_class)->finalize(gobject); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
69 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
70 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
71 static void |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
72 pkui_icon_class_init(PkuiIconClass *klass) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
73 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
74 GObjectClass *gobject_class = G_OBJECT_CLASS(klass); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
75 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
76 gobject_class->finalize = pkui_icon_finalize; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
77 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
78 g_type_class_add_private(klass, sizeof (PkuiIconPrivate)); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
79 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
80 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
81 static void |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
82 pkui_icon_init(PkuiIcon *self) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
83 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
84 self->priv = PKUI_ICON_GET_PRIVATE(self); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
85 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
86 gtk_window_set_default_icon_name("system-software-update"); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
87 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
88 self->priv->status_icon_popup_menu = icon_popup_menu_create(self); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
89 g_object_ref(self->priv->status_icon_popup_menu); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
90 g_object_ref_sink(GTK_OBJECT(self->priv->status_icon_popup_menu)); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
91 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
92 self->priv->status_icon = gtk_status_icon_new(); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
93 gtk_status_icon_set_title(self->priv->status_icon, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
94 _("Software Updates")); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
95 gtk_status_icon_set_visible(self->priv->status_icon, FALSE); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
96 g_signal_connect(G_OBJECT(self->priv->status_icon), "activate", |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
97 G_CALLBACK(icon_activated), self); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
98 g_signal_connect(G_OBJECT(self->priv->status_icon), "popup-menu", |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
99 G_CALLBACK(icon_popup_menu_popup), self); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
100 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
101 self->priv->notification = NULL; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
102 self->priv->backend = NULL; |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
103 self->priv->update_viewer_argv = NULL; |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
104 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
105 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
106 static void |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
107 exec_update_viewer(PkuiIcon *self) |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
108 { |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
109 GError *error = NULL; |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
110 GPid pid; |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
111 |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
112 g_return_if_fail(PKUI_IS_BACKEND(self->priv->backend)); |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
113 g_return_if_fail(self->priv->update_viewer_argv != NULL); |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
114 |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
115 g_debug("executing update viewer command"); |
46
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
116 |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
117 if (!g_spawn_async(NULL, self->priv->update_viewer_argv, NULL, |
46
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
118 G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH, NULL, NULL, &pid, |
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
119 &error)) { |
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
120 g_warning("Could not execute command: %s", error->message); |
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
121 g_error_free(error); |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
122 return; |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
123 } |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
124 g_child_watch_add(pid, (GChildWatchFunc)update_viewer_exited, self); |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
125 |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
126 pkui_backend_set_inhibit_check(self->priv->backend, TRUE); |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
127 hide_notification(self); |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
128 } |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
129 |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
130 static void |
18
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
131 about_dialog_show(GtkMenuItem *item, gpointer user_data) |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
132 { |
39 | 133 static const gchar *copyright = "Copyright \xc2\xa9 2011 Guido " |
18
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
134 "Berhoerster\nCopyright \xc2\xa9 2011 Pavol Rusnak\n"; |
39 | 135 static const gchar *authors[3] = { |
53
7de92a24e86c
Update email address
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
48
diff
changeset
|
136 "Guido Berhoerster <guido+pk-update-icon@berhoerster.name>", |
18
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
137 "Pavol Rusnak <stick@gk2.sk>", |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
138 NULL |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
139 }; |
39 | 140 static const gchar *documenters[2] = { |
53
7de92a24e86c
Update email address
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
48
diff
changeset
|
141 "Guido Berhoerster <guido+pk-update-icon@berhoerster.name>", |
18
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
142 NULL |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
143 }; |
39 | 144 static const gchar *license = |
145 "Licensed under the GNU General Public License Version 2\n\n" | |
146 "This program is free software; you can redistribute it and/or " | |
147 "modify it under the terms of the GNU General Public License as " | |
148 "published by the Free Software Foundation; either version 2 of " | |
149 "the License, or (at your option) any later version.\n\n" | |
150 "This program is distributed in the hope that it will be useful, " | |
151 "but WITHOUT ANY WARRANTY; without even the implied warranty of " | |
152 "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU " | |
153 "General Public License for more details.\n\n" | |
154 "You should have received a copy of the GNU General Public License " | |
155 "along with this program; if not, write to the Free Software " | |
156 "Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, " | |
157 "MA 02110-1301 USA."; | |
158 const gchar *translators = _("translators"); | |
18
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
159 |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
160 if (strcmp(translators, "translators") == 0) |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
161 translators = NULL; |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
162 |
25
bae8a7e20382
use the VERSION macro in the about dialog
Guido Berhoerster <gber@opensuse.org>
parents:
19
diff
changeset
|
163 gtk_show_about_dialog (NULL, "version", VERSION, "copyright", copyright, |
18
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
164 "authors", authors, "documenters", documenters, |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
165 "translator-credits", translators, "license", license, |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
166 "wrap-license", TRUE, NULL); |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
167 } |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
168 |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
169 static void |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
170 backend_check_now(GtkMenuItem *menu_item, gpointer user_data) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
171 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
172 PkuiIcon *self = PKUI_ICON(user_data); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
173 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
174 g_return_if_fail(PKUI_IS_BACKEND(self->priv->backend)); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
175 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
176 pkui_backend_check_now(self->priv->backend); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
177 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
178 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
179 static GtkWidget* |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
180 icon_popup_menu_create(PkuiIcon *self) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
181 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
182 GtkWidget *popup_menu = gtk_menu_new(); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
183 GtkWidget *item; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
184 GtkWidget *image; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
185 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
186 item = gtk_image_menu_item_new_with_mnemonic(_("_Check for Updates")); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
187 image = gtk_image_new_from_icon_name(GTK_STOCK_REFRESH, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
188 GTK_ICON_SIZE_MENU); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
189 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
190 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), item); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
191 g_signal_connect(G_OBJECT(item), "activate", |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
192 G_CALLBACK(backend_check_now), self); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
193 |
18
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
194 item = gtk_image_menu_item_new_with_mnemonic(_("_About")); |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
195 image = gtk_image_new_from_icon_name(GTK_STOCK_ABOUT, |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
196 GTK_ICON_SIZE_MENU); |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
197 gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), image); |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
198 gtk_menu_shell_append(GTK_MENU_SHELL(popup_menu), item); |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
199 g_signal_connect(G_OBJECT(item), "activate", |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
200 G_CALLBACK(about_dialog_show), self); |
9537882d759f
add an about dialog
Guido Berhoerster <guido@berhoerster.name>
parents:
14
diff
changeset
|
201 |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
202 gtk_widget_show_all(GTK_WIDGET(popup_menu)); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
203 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
204 return (popup_menu); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
205 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
206 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
207 static void |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
208 icon_popup_menu_popup(GtkStatusIcon *status_icon, guint button, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
209 guint activate_time, gpointer user_data) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
210 { |
39 | 211 PkuiIcon *self = PKUI_ICON(user_data); |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
212 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
213 gtk_menu_popup(GTK_MENU(self->priv->status_icon_popup_menu), NULL, NULL, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
214 NULL, NULL, button, activate_time); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
215 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
216 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
217 static void |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
218 notification_handle_action(NotifyNotification *notification, gchar *action, |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
219 gpointer user_data) |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
220 { |
39 | 221 PkuiIcon *self = PKUI_ICON(user_data); |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
222 |
46
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
223 if (strcmp(action, "install-updates") == 0) { |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
224 exec_update_viewer(self); |
46
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
225 } |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
226 } |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
227 |
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
228 static void |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
229 update_notification(PkuiIcon *self, guint updates_normal, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
230 guint updates_important) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
231 { |
39 | 232 gchar *message; |
48
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
233 gchar *message_a; |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
234 gchar *message_b; |
39 | 235 gchar *title = updates_important ? |
48
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
236 /* TRANSLATORS: This is a message without number mentioned */ |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
237 ngettext("Important Software Update", "Important Software Updates", |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
238 updates_important + updates_normal) : |
48
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
239 /* TRANSLATORS: This is a message without number mentioned */ |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
240 ngettext("Software Update", "Software Updates", updates_important + |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
241 updates_normal); |
39 | 242 gchar *icon = updates_important ? "software-update-urgent" : |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
243 "software-update-available"; |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
244 gchar *program = NULL; |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
245 |
48
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
246 if (updates_important > 0) { |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
247 if (updates_normal > 0) { |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
248 message_a = g_strdup_printf( |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
249 /* |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
250 * TRANSLATORS: This sentence contains two plurals. |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
251 * Texts related to these plurals are mixed. That is |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
252 * why it is split in three parts. Fill first two parts |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
253 * as you need, and use them as %s in the last one to |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
254 * construct a sentence. Note that if the first form of |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
255 * plural relates only to singular form, it is never |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
256 * used, and dedicated shorter sentences are used. */ |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
257 ngettext("There is %d software update available,", |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
258 "There are %d software updates available,", |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
259 updates_normal + updates_important), |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
260 updates_normal + updates_important); |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
261 /* |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
262 * TRANSLATORS: This is the sentence part in the |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
263 * middle, form of which is related to the first |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
264 * number. If your language does not need it, simply |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
265 * use it as space or so. */ |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
266 message_b = ngettext("of it", "of them", |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
267 updates_normal + updates_important); |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
268 message = g_strdup_printf( |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
269 /* |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
270 * TRANSLATORS: This forms the sentence. If you need to |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
271 * swap parts, use %3$s and %1$s etc. Plurals are |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
272 * related to second number. */ |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
273 ngettext("%s %d %s is important.", |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
274 "%s %d %s are important.", updates_important), |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
275 message_a, updates_important, message_b); |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
276 g_free(message_a); |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
277 } else { |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
278 message = g_strdup_printf(ngettext("There is %d " |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
279 "important software update available.", |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
280 "There are %d important software updates " |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
281 "available.", updates_important), |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
282 updates_important); |
48
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
283 } |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
284 } else { |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
285 message = g_strdup_printf(ngettext("There is %d software " |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
286 "update available.", |
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
287 "There are %d software updates available.", |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
288 updates_normal), updates_normal); |
48
1eb92ab03287
Avoid passing more arguments to g_strdup_printf() than specified in the format
Stanislav Brabec <sbrabec@suse.com>
parents:
46
diff
changeset
|
289 } |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
290 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
291 gtk_status_icon_set_tooltip(self->priv->status_icon, message); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
292 gtk_status_icon_set_from_icon_name(self->priv->status_icon, icon); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
293 gtk_status_icon_set_visible(self->priv->status_icon, TRUE); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
294 |
19
38b37e4a4d63
added a button for installing updates to the notification
Guido Berhoerster <guido@berhoerster.name>
parents:
18
diff
changeset
|
295 if (self->priv->notification == NULL) { |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
296 self->priv->notification = notify_notification_new(title, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
297 message, icon |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
298 #if (NOTIFY_VERSION_MAJOR == 0 && NOTIFY_VERSION_MINOR < 7) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
299 , NULL |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
300 #endif |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
301 ); |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
302 } else { |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
303 notify_notification_update(self->priv->notification, title, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
304 message, icon); |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
305 } |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
306 |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
307 notify_notification_clear_actions(self->priv->notification); |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
308 program = (self->priv->update_viewer_argv != NULL) ? |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
309 g_find_program_in_path(self->priv->update_viewer_argv[0]) : NULL; |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
310 if (program != NULL) { |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
311 notify_notification_add_action(self->priv->notification, |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
312 "install-updates", ngettext("Install Update", |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
313 "Install Updates", updates_normal + updates_important), |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
314 notification_handle_action, self, NULL); |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
315 } |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
316 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
317 notify_notification_set_timeout(self->priv->notification, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
318 NOTIFY_EXPIRES_NEVER); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
319 notify_notification_set_urgency(self->priv->notification, |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
320 updates_important ? NOTIFY_URGENCY_CRITICAL : |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
321 NOTIFY_URGENCY_NORMAL); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
322 notify_notification_show(self->priv->notification, NULL); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
323 |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
324 g_free(program); |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
325 g_free(message); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
326 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
327 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
328 static void |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
329 hide_notification(PkuiIcon *self) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
330 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
331 gtk_status_icon_set_visible(self->priv->status_icon, FALSE); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
332 notify_notification_close(self->priv->notification, NULL); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
333 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
334 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
335 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
336 static void |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
337 backend_state_changed(PkuiBackend *backend, gpointer user_data) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
338 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
339 PkuiIcon *self = PKUI_ICON(user_data); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
340 guint updates_normal; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
341 guint updates_important; |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
342 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
343 g_return_if_fail(PKUI_IS_BACKEND(backend)); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
344 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
345 updates_normal = pkui_backend_get_updates_normal(backend); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
346 updates_important = pkui_backend_get_updates_important(backend); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
347 if (updates_normal > 0 || updates_important > 0) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
348 update_notification(self, updates_normal, updates_important); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
349 else if (updates_normal + updates_important == 0) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
350 hide_notification(self); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
351 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
352 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
353 static void |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
354 update_viewer_exited(GPid pid, gint status, gpointer user_data) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
355 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
356 PkuiIcon *self = PKUI_ICON(user_data); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
357 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
358 g_return_if_fail(PKUI_IS_BACKEND(self->priv->backend)); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
359 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
360 g_spawn_close_pid(pid); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
361 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
362 pkui_backend_check_now(self->priv->backend); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
363 pkui_backend_set_inhibit_check(self->priv->backend, FALSE); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
364 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
365 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
366 static void |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
367 icon_activated(GtkStatusIcon *status_icon, gpointer user_data) |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
368 { |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
369 PkuiIcon *self = PKUI_ICON(user_data); |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
370 gchar *program = NULL; |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
371 |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
372 program = (self->priv->update_viewer_argv != NULL) ? |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
373 g_find_program_in_path(self->priv->update_viewer_argv[0]) : |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
374 NULL; |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
375 if (program != NULL) { |
46
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
376 exec_update_viewer(self); |
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
377 } |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
378 |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
379 g_free(program); |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
380 } |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
381 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
382 PkuiIcon * |
46
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
383 pkui_icon_new(guint startup_delay, guint check_interval, |
aa5d3752091d
Make the update viewer command configurable
Guido Berhoerster <gber@opensuse.org>
parents:
39
diff
changeset
|
384 const gchar *update_viewer_command) |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
385 { |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
386 GError *error = NULL; |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
387 PkuiIcon *icon = g_object_new(PKUI_TYPE_ICON, NULL); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
388 |
55
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
389 if (update_viewer_command == NULL) { |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
390 update_viewer_command = UPDATE_VIEWER_COMMAND; |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
391 } |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
392 |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
393 if (!g_shell_parse_argv(update_viewer_command, NULL, |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
394 &icon->priv->update_viewer_argv, &error)) { |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
395 g_warning("Could not parse command: %s", error->message); |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
396 g_error_free(error); |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
397 } |
b2f6b6b25703
Only show notification action if the update viewer executable exists
Guido Berhoerster <guido+pk-update-icon@berhoerster.name>
parents:
53
diff
changeset
|
398 |
14
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
399 icon->priv->backend = pkui_backend_new(startup_delay, check_interval); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
400 g_signal_connect(icon->priv->backend, "state-changed", |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
401 G_CALLBACK(backend_state_changed), icon); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
402 |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
403 return (icon); |
64f05992d8ec
GObject-based rewrite
Guido Berhoerster <guido@berhoerster.name>
parents:
diff
changeset
|
404 } |