Author: nick
Date: 2007-09-03 19:35:43 +0000 (Mon, 03 Sep 2007)
New Revision: 26041

Modified:
   xfce4-panel/trunk/plugins/systray/xfce-tray-dialogs.c
Log:
* Some improvements in the system tray dialog.


Modified: xfce4-panel/trunk/plugins/systray/xfce-tray-dialogs.c
===================================================================
--- xfce4-panel/trunk/plugins/systray/xfce-tray-dialogs.c       2007-09-03 
17:30:42 UTC (rev 26040)
+++ xfce4-panel/trunk/plugins/systray/xfce-tray-dialogs.c       2007-09-03 
19:35:43 UTC (rev 26041)
@@ -19,8 +19,12 @@
 #include <config.h>
 #endif
 
-#define XFCE_TRAY_DIALOG_ICON_SIZE 16
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
 
+#define XFCE_TRAY_DIALOG_ICON_SIZE 22
+
 #include <gtk/gtk.h>
 #include <libxfce4util/libxfce4util.h>
 #include <libxfcegui4/xfce-titled-dialog.h>
@@ -105,16 +109,47 @@
 xfce_tray_dialogs_icon (GtkIconTheme *icon_theme,
                         const gchar  *name)
 {
-    GdkPixbuf *icon;
+    GdkPixbuf   *icon;
+    guint        i;
+    gchar       *first_occ;
+    const gchar *p, *fallback[][2] = 
+    {
+        { "xfce-mcs-manager", "input-mouse" },
+        { "bluetooth-applet", "stock_bluetooth" }
+    };
     
+    /* return null on no name */
+    if (G_UNLIKELY (name == NULL))
+        return NULL;
+    
     /* try to load the icon from the theme */
     icon = gtk_icon_theme_load_icon (icon_theme, name, 
XFCE_TRAY_DIALOG_ICON_SIZE, 0, NULL);
+    if (G_LIKELY (icon))
+        return icon;
     
-    /* if no icon was found, we could check the childeren it the name is 
currently in the
-     * tray, if so, create a pixbuf from the window data
-     */
+    /* try the first part when the name contains a space */
+    p = g_utf8_strchr (name, -1, ' ');
+    if (p)
+    {
+        /* get the string before the first occurrence */
+        first_occ = g_strndup (name, p - name);
+        
+        /* try to load the icon from the theme */
+        icon = gtk_icon_theme_load_icon (icon_theme, first_occ, 
XFCE_TRAY_DIALOG_ICON_SIZE, 0, NULL);
+            
+        /* cleanup */
+        g_free (first_occ);
+        
+        if (icon)
+            return icon;
+    }
+        
+    /* find and return a fall-back icon */
+    for (i = 0; i < G_N_ELEMENTS (fallback); i++)
+        if (strcmp (name, fallback[i][0]) == 0)
+            return gtk_icon_theme_load_icon (icon_theme, fallback[i][1], 
XFCE_TRAY_DIALOG_ICON_SIZE, 0, NULL);
     
-    return icon;
+    return NULL;
 }
 
 
@@ -229,7 +264,7 @@
     gtk_window_set_screen (GTK_WINDOW (dialog), gtk_widget_get_screen 
(GTK_WIDGET (plugin->panel_plugin)));
     gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER);
     gtk_window_set_icon_name (GTK_WINDOW (dialog), "xfce4-settings");
-    gtk_window_set_default_size (GTK_WINDOW (dialog), 250, 300);
+    gtk_window_set_default_size (GTK_WINDOW (dialog), 280, 350);
     gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
     g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK 
(xfce_tray_dialogs_configure_response), plugin);
     
@@ -267,6 +302,9 @@
     /* create treeview */
     treeview = gtk_tree_view_new_with_model (GTK_TREE_MODEL (store));
     gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (treeview), FALSE);
+    gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview), 
APPLICATION_NAME);
+    gtk_tree_view_set_enable_search (GTK_TREE_VIEW (treeview), TRUE);
+    gtk_tree_view_set_fixed_height_mode (GTK_TREE_VIEW (treeview), TRUE);
     gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview), TRUE);
     g_signal_connect_swapped (G_OBJECT (treeview), "destroy", G_CALLBACK 
(xfce_tray_dialogs_free_store), store);
     gtk_container_add (GTK_CONTAINER (scroll), treeview);
@@ -277,19 +315,25 @@
     
     /* create column */
     column = gtk_tree_view_column_new ();
+    gtk_tree_view_column_set_spacing (column, 2);
     gtk_tree_view_column_set_expand (column, TRUE);
     gtk_tree_view_column_set_resizable (column, FALSE);
+    gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_FIXED);
     gtk_tree_view_append_column (GTK_TREE_VIEW (treeview), column);
-    
-    /* create renders */
+
+    /* renderer for the icon */
     renderer = gtk_cell_renderer_pixbuf_new();
+    gtk_cell_renderer_set_fixed_size (renderer, XFCE_TRAY_DIALOG_ICON_SIZE, 
XFCE_TRAY_DIALOG_ICON_SIZE);
     gtk_tree_view_column_pack_start (column, renderer, FALSE);
     gtk_tree_view_column_set_attributes (column, renderer, "pixbuf", 
APPLICATION_ICON, NULL);
     
+    /* renderer for the name */
     renderer = gtk_cell_renderer_text_new ();
     gtk_tree_view_column_pack_start (column, renderer, TRUE);
     gtk_tree_view_column_set_attributes (column, renderer, "text", 
APPLICATION_NAME, NULL);
+    g_object_set (G_OBJECT (renderer), "ellipsize", PANGO_ELLIPSIZE_END, NULL);
     
+    /* renderer for the toggle button */
     renderer = gtk_cell_renderer_toggle_new ();
     gtk_tree_view_column_pack_start (column, renderer, FALSE);
     gtk_tree_view_column_set_attributes (column, renderer, "active", 
APPLICATION_HIDDEN, NULL);

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to