This is an automated email from the git hooks/post-receive script.

ochosi pushed a 
commit to branch 
master
in repository xfce/xfce4-panel.

commit 7db1f872835f522a44c0e935897187444d486ea7
Author: Clement Lefebvre <r...@linuxmint.com>
Date:   Fri Jan 17 22:48:57 2020 +0100

    systray: Basic support for symbolic icons
---
 plugins/systray/systray-manager.c | 86 ++++++++++++++++++++++++++++++++++++++-
 plugins/systray/systray-manager.h |  6 +++
 plugins/systray/systray.c         | 32 ++++++++++++++-
 3 files changed, 122 insertions(+), 2 deletions(-)

diff --git a/plugins/systray/systray-manager.c 
b/plugins/systray/systray-manager.c
index 4915649..3901e7b 100644
--- a/plugins/systray/systray-manager.c
+++ b/plugins/systray/systray-manager.c
@@ -78,6 +78,7 @@ static void            systray_manager_handle_dock_request    
            (Systr
 static gboolean        systray_manager_handle_undock_request              
(GtkSocket           *socket,
                                                                            
gpointer             user_data);
 static void            systray_manager_set_visual                         
(SystrayManager      *manager);
+static void            systray_manager_set_colors_property                
(SystrayManager      *manager);
 static void            systray_manager_message_free                       
(SystrayMessage      *message);
 static void            systray_manager_message_remove_from_list           
(SystrayManager      *manager,
                                                                            
XClientMessageEvent *xevent);
@@ -109,6 +110,12 @@ struct _SystrayManager
   /* list of client sockets */
   GHashTable     *sockets;
 
+  /* symbolic colors */
+  GdkColor fg;
+  GdkColor error;
+  GdkColor warning;
+  GdkColor success;
+
   /* orientation of the tray */
   GtkOrientation  orientation;
 
@@ -218,6 +225,23 @@ systray_manager_init (SystrayManager *manager)
   manager->orientation = GTK_ORIENTATION_HORIZONTAL;
   manager->messages = NULL;
   manager->sockets = g_hash_table_new (NULL, NULL);
+
+  /* initialize symbolic colors */
+  manager->fg.red = 0.0;
+  manager->fg.green = 0.0;
+  manager->fg.blue = 0.0;
+
+  manager->error.red = 1.0;
+  manager->error.green = 0.0;
+  manager->error.blue = 0.0;
+
+  manager->warning.red = 1.0;
+  manager->warning.green = 1.0;
+  manager->warning.blue = 0.0;
+
+  manager->success.red = 0.0;
+  manager->success.green = 1.0;
+  manager->success.blue = 0.0;
 }
 
 
@@ -344,9 +368,12 @@ G_GNUC_END_IGNORE_DEPRECATIONS
   /* set the invisible window and take a reference */
   manager->invisible = GTK_WIDGET (g_object_ref (G_OBJECT (invisible)));
 
-  /* set the visial property for transparent tray icons */
+  /* set the visual property for transparent tray icons */
   systray_manager_set_visual (manager);
 
+  /* set the property for symbolic color support */
+  systray_manager_set_colors_property (manager);
+
   /* get the current x server time stamp */
   timestamp = gdk_x11_get_server_time (gtk_widget_get_window (GTK_WIDGET 
(invisible)));
 
@@ -794,6 +821,63 @@ systray_manager_set_visual (SystrayManager *manager)
 
 
 void
+systray_manager_set_colors (SystrayManager *manager,
+                            GdkColor       *fg,
+                            GdkColor       *error,
+                            GdkColor       *warning,
+                            GdkColor       *success)
+{
+  panel_return_if_fail (XFCE_IS_SYSTRAY_MANAGER (manager));
+
+  manager->fg = *fg;
+  manager->error = *error;
+  manager->warning = *warning;
+  manager->success = *success;
+
+  systray_manager_set_colors_property (manager);
+}
+
+
+
+static void
+systray_manager_set_colors_property (SystrayManager *manager)
+{
+  GdkWindow  *window;
+  GdkDisplay *display;
+  Atom        atom;
+  gulong      data[12];
+
+  g_return_if_fail (manager->invisible != NULL);
+  window = gtk_widget_get_window (manager->invisible);
+  g_return_if_fail (window != NULL);
+
+  display = gtk_widget_get_display (manager->invisible);
+  atom = gdk_x11_get_xatom_by_name_for_display (display, 
"_NET_SYSTEM_TRAY_COLORS");
+
+  data[0] = manager->fg.red;
+  data[1] = manager->fg.green;
+  data[2] = manager->fg.blue;
+  data[3] = manager->error.red;
+  data[4] = manager->error.green;
+  data[5] = manager->error.blue;
+  data[6] = manager->warning.red;
+  data[7] = manager->warning.green;
+  data[8] = manager->warning.blue;
+  data[9] = manager->success.red;
+  data[10] = manager->success.green;
+  data[11] = manager->success.blue;
+
+  XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
+                   GDK_WINDOW_XID (window),
+                   atom,
+                   XA_CARDINAL, 32,
+                   PropModeReplace,
+                   (guchar *) &data, 12);
+}
+
+
+
+void
 systray_manager_set_orientation (SystrayManager *manager,
                                  GtkOrientation  orientation)
 {
diff --git a/plugins/systray/systray-manager.h 
b/plugins/systray/systray-manager.h
index f3d6919..0b1024c 100644
--- a/plugins/systray/systray-manager.h
+++ b/plugins/systray/systray-manager.h
@@ -64,6 +64,12 @@ gboolean        systray_manager_register             
(SystrayManager      *manag
 
 void            systray_manager_unregister           (SystrayManager      
*manager);
 
+void            systray_manager_set_colors           (SystrayManager *manager,
+                                                      GdkColor       *fg,
+                                                      GdkColor       *error,
+                                                      GdkColor       *warning,
+                                                      GdkColor       *success);
+
 void            systray_manager_set_orientation      (SystrayManager      
*manager,
                                                       GtkOrientation       
orientation);
 
diff --git a/plugins/systray/systray.c b/plugins/systray/systray.c
index fbeba04..4e8297d 100644
--- a/plugins/systray/systray.c
+++ b/plugins/systray/systray.c
@@ -21,6 +21,10 @@
 #include <config.h>
 #endif
 
+#include <gdk/gdk.h>
+#include <gdk/gdkx.h>
+#include <gtk/gtk.h>
+
 #include <libxfce4util/libxfce4util.h>
 #include <libxfce4ui/libxfce4ui.h>
 #include <common/panel-private.h>
@@ -34,7 +38,6 @@
 #include "systray-manager.h"
 #include "systray-dialog_ui.h"
 
-#define ICON_SIZE     (22)
 #define BUTTON_SIZE   (16)
 
 
@@ -508,12 +511,39 @@ systray_plugin_orientation_changed (XfcePanelPlugin 
*panel_plugin,
 {
   SystrayPlugin *plugin = XFCE_SYSTRAY_PLUGIN (panel_plugin);
 
+
   gtk_orientable_set_orientation (GTK_ORIENTABLE (plugin->hvbox), orientation);
   systray_box_set_orientation (XFCE_SYSTRAY_BOX (plugin->box), orientation);
 
   if (G_LIKELY (plugin->manager != NULL))
     systray_manager_set_orientation (plugin->manager, orientation);
 
+  /* apply symbolic colors */
+  if (G_LIKELY (plugin->manager != NULL)) {
+    GtkStyleContext *context;
+    GdkRGBA rgba;
+    GdkColor color;
+    GdkColor fg;
+    GdkColor error;
+    GdkColor warning;
+    GdkColor success;
+
+    context = gtk_widget_get_style_context (GTK_WIDGET (plugin->box));
+    gtk_style_context_get_color (context, GTK_STATE_NORMAL, &rgba);
+
+    color.pixel = 0;
+    color.red = rgba.red * G_MAXUSHORT;
+    color.green = rgba.green * G_MAXUSHORT;
+    color.blue = rgba.blue * G_MAXUSHORT;
+
+    g_warning ("setting the symbolic color to: %d %d %d", color.red, 
color.green, color.blue);
+
+    fg = error = warning = success = color;
+
+    systray_manager_set_colors (plugin->manager, &fg, &error, &warning, 
&success);
+  }
+
+
   if (orientation == GTK_ORIENTATION_HORIZONTAL)
     gtk_widget_set_size_request (plugin->button, BUTTON_SIZE, -1);
   else

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.
_______________________________________________
Xfce4-commits mailing list
Xfce4-commits@xfce.org
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to