summaryrefslogtreecommitdiff
path: root/applets/notification_area/status-notifier
diff options
context:
space:
mode:
Diffstat (limited to 'applets/notification_area/status-notifier')
-rw-r--r--applets/notification_area/status-notifier/sn-dbus-menu-item.c25
-rw-r--r--applets/notification_area/status-notifier/sn-dbus-menu-item.h4
-rw-r--r--applets/notification_area/status-notifier/sn-dbus-menu.c6
-rw-r--r--applets/notification_area/status-notifier/sn-host-v0.c3
-rw-r--r--applets/notification_area/status-notifier/sn-item-v0.c54
-rw-r--r--applets/notification_area/status-notifier/sn-item.c1
6 files changed, 57 insertions, 36 deletions
diff --git a/applets/notification_area/status-notifier/sn-dbus-menu-item.c b/applets/notification_area/status-notifier/sn-dbus-menu-item.c
index 62f21ca7..07d1957e 100644
--- a/applets/notification_area/status-notifier/sn-dbus-menu-item.c
+++ b/applets/notification_area/status-notifier/sn-dbus-menu-item.c
@@ -16,11 +16,12 @@
*/
#include <config.h>
+#include <libmate-desktop/mate-image-menu-item.h>
#include "sn-dbus-menu-item.h"
static GdkPixbuf *
-pxibuf_new (GVariant *variant)
+pixbuf_new (GVariant *variant)
{
gsize length;
const guchar *data;
@@ -149,7 +150,7 @@ sn_dbus_menu_item_new (GVariant *props)
else if (g_strcmp0 (prop, "icon-name") == 0)
item->icon_name = g_variant_dup_string (value, NULL);
else if (g_strcmp0 (prop, "icon-data") == 0)
- item->icon_data = pxibuf_new (value);
+ item->icon_data = pixbuf_new (value);
else if (g_strcmp0 (prop, "label") == 0)
item->label = g_variant_dup_string (value, NULL);
else if (g_strcmp0 (prop, "shortcut") == 0)
@@ -203,8 +204,8 @@ sn_dbus_menu_item_new (GVariant *props)
cairo_surface_destroy (surface);
}
- item->item = gtk_image_menu_item_new ();
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item->item),
+ item->item = mate_image_menu_item_new ();
+ mate_image_menu_item_set_image (MATE_IMAGE_MENU_ITEM (item->item),
image);
}
@@ -252,7 +253,7 @@ sn_dbus_menu_item_new (GVariant *props)
}
void
-sn_dubs_menu_item_free (gpointer data)
+sn_dbus_menu_item_free (gpointer data)
{
SnDBusMenuItem *item;
@@ -325,7 +326,7 @@ sn_dbus_menu_item_update_props (SnDBusMenuItem *item,
image = NULL;
}
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item->item),
+ mate_image_menu_item_set_image (MATE_IMAGE_MENU_ITEM (item->item),
image);
}
else if (g_strcmp0 (prop, "icon-data") == 0)
@@ -333,7 +334,7 @@ sn_dbus_menu_item_update_props (SnDBusMenuItem *item,
GtkWidget *image;
g_clear_object (&item->icon_data);
- item->icon_data = pxibuf_new (value);
+ item->icon_data = pixbuf_new (value);
if (item->icon_data)
{
@@ -347,7 +348,7 @@ sn_dbus_menu_item_update_props (SnDBusMenuItem *item,
image = NULL;
}
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item->item),
+ mate_image_menu_item_set_image (MATE_IMAGE_MENU_ITEM (item->item),
image);
}
else if (g_strcmp0 (prop, "label") == 0)
@@ -437,18 +438,18 @@ sn_dbus_menu_item_remove_props (SnDBusMenuItem *item,
else if (g_strcmp0 (prop, "icon-name") == 0)
{
g_clear_pointer (&item->icon_name, g_free);
- if (GTK_IS_IMAGE_MENU_ITEM (item->item))
+ if (MATE_IS_IMAGE_MENU_ITEM (item->item))
{
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item->item),
+ mate_image_menu_item_set_image (MATE_IMAGE_MENU_ITEM (item->item),
NULL);
}
}
else if (g_strcmp0 (prop, "icon-data") == 0)
{
g_clear_object (&item->icon_data);
- if (GTK_IS_IMAGE_MENU_ITEM (item->item))
+ if (MATE_IS_IMAGE_MENU_ITEM (item->item))
{
- gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (item->item),
+ mate_image_menu_item_set_image (MATE_IMAGE_MENU_ITEM (item->item),
NULL);
}
}
diff --git a/applets/notification_area/status-notifier/sn-dbus-menu-item.h b/applets/notification_area/status-notifier/sn-dbus-menu-item.h
index c89de5c3..458417f2 100644
--- a/applets/notification_area/status-notifier/sn-dbus-menu-item.h
+++ b/applets/notification_area/status-notifier/sn-dbus-menu-item.h
@@ -16,7 +16,7 @@
*/
#ifndef SN_DBUS_MENU_ITEM_H
-#define SN_DUBS_MENU_ITEM_H
+#define SN_DBUS_MENU_ITEM_H
#include <gtk/gtk.h>
@@ -51,7 +51,7 @@ typedef struct
SnDBusMenuItem *sn_dbus_menu_item_new (GVariant *props);
-void sn_dubs_menu_item_free (gpointer data);
+void sn_dbus_menu_item_free (gpointer data);
void sn_dbus_menu_item_update_props (SnDBusMenuItem *item,
GVariant *props);
diff --git a/applets/notification_area/status-notifier/sn-dbus-menu.c b/applets/notification_area/status-notifier/sn-dbus-menu.c
index 03a95a4b..7b25c63f 100644
--- a/applets/notification_area/status-notifier/sn-dbus-menu.c
+++ b/applets/notification_area/status-notifier/sn-dbus-menu.c
@@ -419,8 +419,8 @@ sn_dbus_menu_finalize (GObject *object)
menu = SN_DBUS_MENU (object);
- g_free (menu->bus_name);
- g_free (menu->object_path);
+ g_clear_pointer (&menu->bus_name, g_free);
+ g_clear_pointer (&menu->object_path, g_free);
G_OBJECT_CLASS (sn_dbus_menu_parent_class)->finalize (object);
}
@@ -485,7 +485,7 @@ sn_dbus_menu_class_init (SnDBusMenuClass *menu_class)
static void
sn_dbus_menu_init (SnDBusMenu *menu)
{
- menu->items = g_hash_table_new_full (NULL, NULL, NULL, sn_dubs_menu_item_free);
+ menu->items = g_hash_table_new_full (NULL, NULL, NULL, sn_dbus_menu_item_free);
menu->cancellable = g_cancellable_new ();
}
diff --git a/applets/notification_area/status-notifier/sn-host-v0.c b/applets/notification_area/status-notifier/sn-host-v0.c
index 64da5da9..4ad6b359 100644
--- a/applets/notification_area/status-notifier/sn-host-v0.c
+++ b/applets/notification_area/status-notifier/sn-host-v0.c
@@ -193,7 +193,6 @@ register_host_cb (GObject *source_object,
GError *error;
SnHostV0 *v0;
gchar **items;
- gint i;
error = NULL;
sn_watcher_v0_gen_call_register_host_finish (SN_WATCHER_V0_GEN (source_object),
@@ -224,7 +223,7 @@ register_host_cb (GObject *source_object,
items = sn_watcher_v0_gen_dup_registered_items (v0->watcher);
if (items) {
- for (i = 0; items[i] != NULL; i++)
+ for (gint i = 0; items[i] != NULL; i++)
add_registered_item (v0, items[i]);
}
diff --git a/applets/notification_area/status-notifier/sn-item-v0.c b/applets/notification_area/status-notifier/sn-item-v0.c
index 3ec4d037..9deab9d3 100644
--- a/applets/notification_area/status-notifier/sn-item-v0.c
+++ b/applets/notification_area/status-notifier/sn-item-v0.c
@@ -156,7 +156,7 @@ compare_size (gconstpointer a,
}
static cairo_surface_t *
-get_surface (SnItemV0 *v0,
+get_surface (SnIconPixmap **icon_pixmap,
GtkOrientation orientation,
gint size)
{
@@ -165,10 +165,10 @@ get_surface (SnItemV0 *v0,
SnIconPixmap *pixmap = NULL;
GList *l;
- g_assert (v0->icon_pixmap != NULL && v0->icon_pixmap[0] != NULL);
+ g_assert (icon_pixmap != NULL && icon_pixmap[0] != NULL);
- for (i = 0; v0->icon_pixmap[i] != NULL; i++)
- pixmaps = g_list_prepend (pixmaps, v0->icon_pixmap[i]);
+ for (i = 0; icon_pixmap[i] != NULL; i++)
+ pixmaps = g_list_prepend (pixmaps, icon_pixmap[i]);
pixmaps = g_list_sort_with_data (pixmaps, compare_size,
GUINT_TO_POINTER (orientation));
@@ -234,6 +234,9 @@ get_icon_by_name (const gchar *icon_name,
NULL, GTK_ICON_LOOKUP_FORCE_SIZE, NULL);
}
+#define ICON_NAME_VALID(icon_name) (icon_name && icon_name[0] != '\0')
+#define ICON_PIXMAP_VALID(icon_pixmap) (icon_pixmap && icon_pixmap[0] != NULL)
+
static void
update (SnItemV0 *v0)
{
@@ -241,7 +244,9 @@ update (SnItemV0 *v0)
GtkImage *image;
SnTooltip *tip;
gint icon_size;
- gboolean visible;
+ const gchar *icon_name;
+ SnIconPixmap **icon_pixmap;
+
g_return_if_fail (SN_IS_ITEM_V0 (v0));
image = GTK_IMAGE (v0->image);
@@ -251,19 +256,34 @@ update (SnItemV0 *v0)
else
icon_size = MAX (1, v0->effective_icon_size);
- if (v0->icon_name != NULL && v0->icon_name[0] != '\0')
+ /* If the item requests attention and has a specific icon for it, use that
+ * instead of the default icon. */
+ if (g_strcmp0 (v0->status, "NeedsAttention") == 0 &&
+ (ICON_NAME_VALID (v0->attention_icon_name) ||
+ ICON_PIXMAP_VALID (v0->attention_icon_pixmap)))
+ {
+ icon_name = v0->attention_icon_name;
+ icon_pixmap = v0->attention_icon_pixmap;
+ }
+ else
+ {
+ icon_name = v0->icon_name;
+ icon_pixmap = v0->icon_pixmap;
+ }
+
+ if (ICON_NAME_VALID (icon_name))
{
cairo_surface_t *surface;
gint scale;
scale = gtk_widget_get_scale_factor (GTK_WIDGET (image));
- surface = get_icon_by_name (v0->icon_name, icon_size, scale);
+ surface = get_icon_by_name (icon_name, icon_size, scale);
if (!surface)
{
GdkPixbuf *pixbuf;
/*try to find icons specified by path and filename*/
- pixbuf = gdk_pixbuf_new_from_file (v0->icon_name, NULL);
+ pixbuf = gdk_pixbuf_new_from_file (icon_name, NULL);
if (pixbuf && icon_size > 1)
{
/*An icon specified by path and filename may be the wrong size for the tray */
@@ -281,11 +301,11 @@ update (SnItemV0 *v0)
gtk_image_set_from_surface (image, surface);
cairo_surface_destroy (surface);
}
- else if (v0->icon_pixmap != NULL && v0->icon_pixmap[0] != NULL)
+ else if (ICON_PIXMAP_VALID (icon_pixmap))
{
cairo_surface_t *surface;
- surface = get_surface (v0,
+ surface = get_surface (icon_pixmap,
gtk_orientable_get_orientation (GTK_ORIENTABLE (v0)),
icon_size);
if (surface != NULL)
@@ -341,7 +361,7 @@ update (SnItemV0 *v0)
/* TODO: hide "Passive" items with a setting? */
/*Special case mate-polkit*/
if (g_strcmp0 (v0->status, "password-dialog") != 0){
- visible = g_strcmp0 (v0->status, "Passive") != 0;
+ gboolean visible = g_strcmp0 (v0->status, "Passive") != 0;
gtk_widget_set_visible (GTK_WIDGET (v0), visible);
}
else
@@ -640,7 +660,7 @@ update_title (GObject *source_object,
v0 = SN_ITEM_V0 (user_data);
- g_clear_pointer (&v0->title, g_free);
+ g_free (v0->title);
v0->title = g_variant_dup_string (variant, NULL);
g_clear_pointer (&variant, g_variant_unref);
@@ -668,7 +688,7 @@ update_icon_name (GObject *source_object,
v0 = SN_ITEM_V0 (user_data);
- g_clear_pointer (&v0->icon_name, g_free);
+ g_free (v0->icon_name);
v0->icon_name = g_variant_dup_string (variant, NULL);
g_clear_pointer (&variant, g_variant_unref);
@@ -719,7 +739,7 @@ update_overlay_icon_name (GObject *source_object,
v0 = SN_ITEM_V0 (user_data);
- g_clear_pointer (&v0->overlay_icon_name, g_free);
+ g_free (v0->overlay_icon_name);
v0->overlay_icon_name = g_variant_dup_string (variant, NULL);
g_clear_pointer (&variant, g_variant_unref);
@@ -770,7 +790,7 @@ update_attention_icon_name (GObject *source_object,
v0 = SN_ITEM_V0 (user_data);
- g_clear_pointer (&v0->attention_icon_name, g_free);
+ g_free (v0->attention_icon_name);
v0->attention_icon_name = g_variant_dup_string (variant, NULL);
g_clear_pointer (&variant, g_variant_unref);
@@ -792,7 +812,7 @@ update_attention_icon_pixmap (GObject *source_object,
v0 = SN_ITEM_V0 (user_data);
- g_clear_pointer (&v0->attention_icon_pixmap, icon_pixmap_free);
+ icon_pixmap_free (v0->attention_icon_pixmap);
v0->attention_icon_pixmap = icon_pixmap_new (variant);
g_clear_pointer (&variant, g_variant_unref);
@@ -821,7 +841,7 @@ update_tooltip (GObject *source_object,
v0 = SN_ITEM_V0 (user_data);
- g_clear_pointer (&v0->tooltip, sn_tooltip_free);
+ sn_tooltip_free (v0->tooltip);
v0->tooltip = sn_tooltip_new (variant);
g_clear_pointer (&variant, g_variant_unref);
diff --git a/applets/notification_area/status-notifier/sn-item.c b/applets/notification_area/status-notifier/sn-item.c
index 3dd0d605..9677e67e 100644
--- a/applets/notification_area/status-notifier/sn-item.c
+++ b/applets/notification_area/status-notifier/sn-item.c
@@ -358,6 +358,7 @@ sn_item_ready (SnItem *item)
priv = SN_ITEM (item)->priv;
priv->menu = sn_dbus_menu_new (priv->bus_name, menu);
g_object_ref_sink (priv->menu);
+ gtk_button_set_always_show_image (GTK_BUTTON (item),TRUE);
}
static const gchar *