[Xfce4-commits] <xfwm4:ochosi/tabwin> Replace GtkImage with GtkButton in Tabwin and reorder layout accordingly

Simon Steinbeiss noreply at xfce.org
Tue Jul 9 01:22:02 CEST 2013


Updating branch refs/heads/ochosi/tabwin
         to 71fc0de4b3f4da1e6de43a89fdd7d9761e358d4d (commit)
       from b2423468e8ce6fb18ec624a208e7332b23468625 (commit)

commit 71fc0de4b3f4da1e6de43a89fdd7d9761e358d4d
Author: Simon Steinbeiss <simon.steinbeiss at elfenbeinturm.at>
Date:   Tue Jul 9 01:20:08 2013 +0200

    Replace GtkImage with GtkButton in Tabwin and reorder layout accordingly

 src/tabwin.c |  104 ++++++++++++++++++----------------------------------------
 src/tabwin.h |    1 -
 2 files changed, 32 insertions(+), 73 deletions(-)

diff --git a/src/tabwin.c b/src/tabwin.c
index c130418..3111fb0 100644
--- a/src/tabwin.c
+++ b/src/tabwin.c
@@ -101,18 +101,8 @@ paint_selected (GtkWidget *w, GdkEventExpose *event, gpointer data)
     g_return_val_if_fail (GTK_IS_WIDGET(w), FALSE);
     TRACE ("entering paint_selected");
 
-    gtk_draw_flat_box (w->style, w->window,
-        GTK_STATE_SELECTED,
-        GTK_SHADOW_NONE,
-        w->allocation.x - WIN_ICON_BORDER,
-        w->allocation.y - WIN_ICON_BORDER,
-        w->allocation.width + 2 * WIN_ICON_BORDER,
-        w->allocation.height + 2 * WIN_ICON_BORDER);
-    gtk_draw_focus (w->style, w->window,
-        w->allocation.x - WIN_ICON_BORDER,
-        w->allocation.y - WIN_ICON_BORDER,
-        w->allocation.width + 2 * WIN_ICON_BORDER,
-        w->allocation.height + 2 * WIN_ICON_BORDER);
+    gtk_button_set_relief (GTK_BUTTON (w), GTK_RELIEF_NORMAL);
+
     return FALSE;
 }
 
@@ -124,8 +114,8 @@ pretty_string (const gchar *s)
 
     if (s)
     {
-        canonical = g_ascii_strup (s, -1);
-        g_strcanon (canonical, "[]()0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ", ' ');
+        canonical = g_strdup_printf ("%s",s);
+        g_strcanon (canonical, "[]()0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", ' ');
         g_strstrip (canonical);
     }
     else
@@ -139,7 +129,6 @@ pretty_string (const gchar *s)
 static void
 tabwinSetLabel (TabwinWidget *tbw, gchar *class, gchar *label, int workspace)
 {
-    gchar *markup;
     gchar *message;
     PangoLayout *layout;
 
@@ -147,12 +136,9 @@ tabwinSetLabel (TabwinWidget *tbw, gchar *class, gchar *label, int workspace)
     TRACE ("entering tabwinSetLabel");
 
     message = pretty_string (class);
-    markup = g_strconcat ("<span size=\"larger\" weight=\"bold\">", message, "</span>", NULL);
+    gtk_button_set_label (GTK_BUTTON (tbw->selected), message);
     g_free (message);
 
-    gtk_label_set_markup (GTK_LABEL (tbw->class), markup);
-    g_free (markup);
-
     if (tbw->tabwin->display_workspace)
     {
         message = g_strdup_printf ("[%i] - %s", workspace + 1, label);
@@ -217,7 +203,6 @@ createWindowIcon (Client *c, gint icon_size)
     icon_pixbuf = getAppIcon (c->screen_info->display_info, c->window, icon_size, icon_size);
     icon_pixbuf_stated = NULL;
     icon = gtk_image_new ();
-    g_object_set_data (G_OBJECT (icon), "client-ptr-val", c);
 
     if (icon_pixbuf)
     {
@@ -261,7 +246,7 @@ createWindowlist (ScreenInfo *screen_info, TabwinWidget *tbw)
 {
     Client *c;
     GList *client_list;
-    GtkWidget *windowlist, *icon, *selected;
+    GtkWidget *windowlist, *icon, *selected, *window_button;
     int packpos, monitor_width;
     Tabwin *t;
     gint icon_size = WIN_ICON_SIZE;
@@ -280,29 +265,35 @@ createWindowlist (ScreenInfo *screen_info, TabwinWidget *tbw)
     tbw->grid_rows = screen_info->client_count / tbw->grid_cols + 1;
     tbw->widgets = NULL;
     windowlist = gtk_table_new (tbw->grid_rows, tbw->grid_cols, FALSE);
-
     /* pack the client icons */
     for (client_list = *t->client_list; client_list; client_list = g_list_next (client_list))
     {
         c = (Client *) client_list->data;
         TRACE ("createWindowlist: adding %s", c->name);
         icon = createWindowIcon (c, icon_size);
-        gtk_table_attach (GTK_TABLE (windowlist), GTK_WIDGET (icon),
+
+        window_button = gtk_button_new_with_label ("");
+        g_object_set_data (G_OBJECT (window_button), "client-ptr-val", c);
+        gtk_button_set_image (GTK_BUTTON (window_button), icon);
+        gtk_button_set_image_position (GTK_BUTTON (window_button), GTK_POS_TOP);
+        gtk_button_set_relief (GTK_BUTTON (window_button), GTK_RELIEF_NONE);
+        gtk_widget_set_size_request (GTK_WIDGET (window_button), icon_size+24, icon_size+24);
+
+        gtk_table_attach (GTK_TABLE (windowlist), GTK_WIDGET (window_button),
             packpos % tbw->grid_cols, packpos % tbw->grid_cols + 1,
             packpos / tbw->grid_cols, packpos / tbw->grid_cols + 1,
-            GTK_FILL, GTK_FILL, 7, 7);
-        tbw->widgets = g_list_append (tbw->widgets, icon);
+            GTK_FILL, GTK_FILL, 2, 2);
+        tbw->widgets = g_list_append (tbw->widgets, window_button);
         packpos++;
         if (c == t->selected->data)
         {
-            selected = icon;
+            selected = window_button;
         }
     }
     if (selected)
     {
         tabwinSetSelected (tbw, selected);
     }
-
     return windowlist;
 }
 
@@ -360,11 +351,8 @@ static TabwinWidget *
 tabwinCreateWidget (Tabwin *tabwin, ScreenInfo *screen_info, gint monitor_num)
 {
     TabwinWidget *tbw;
-    GtkWidget *frame;
-    GtkWidget *colorbox1, *colorbox2;
     GtkWidget *vbox;
     GtkWidget *windowlist;
-    GdkColor *color;
     GdkRectangle monitor;
     gint border_width = WIN_COLOR_BORDER;
 
@@ -379,64 +367,34 @@ tabwinCreateWidget (Tabwin *tabwin, ScreenInfo *screen_info, gint monitor_num)
     tbw->selected = NULL;
     tbw->selected_callback = 0;
 
+    gtk_widget_style_get (GTK_WIDGET (tbw), "border-width", &border_width, NULL);
     gtk_window_set_screen (GTK_WINDOW (tbw), screen_info->gscr);
     gtk_widget_set_name (GTK_WIDGET (tbw), "xfwm4-tabwin");
     gtk_widget_realize (GTK_WIDGET (tbw));
-    gtk_container_set_border_width (GTK_CONTAINER (tbw), 0);
+    gtk_container_set_border_width (GTK_CONTAINER (tbw), 6);
     gtk_window_set_position (GTK_WINDOW (tbw), GTK_WIN_POS_NONE);
     gdk_screen_get_monitor_geometry (screen_info->gscr, tbw->monitor_num, &monitor);
     gtk_window_move (GTK_WINDOW(tbw), monitor.x + monitor.width / 2,
                                       monitor.y + monitor.height / 2);
 
-    frame = gtk_frame_new (NULL);
-    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT);
-    gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
-    gtk_container_add (GTK_CONTAINER (tbw), frame);
-
-    colorbox1 = gtk_event_box_new ();
-    gtk_container_add (GTK_CONTAINER (frame), colorbox1);
-
-    gtk_widget_style_get (GTK_WIDGET (tbw), "border-width", &border_width, NULL);
-    colorbox2 = gtk_event_box_new ();
-    gtk_container_set_border_width (GTK_CONTAINER (colorbox2), border_width);
-    gtk_container_add (GTK_CONTAINER (colorbox1), colorbox2);
-
     vbox = gtk_vbox_new (FALSE, 5);
-    gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
-    gtk_container_add (GTK_CONTAINER (colorbox2), vbox);
-
-    tbw->class = gtk_label_new ("");
-    gtk_label_set_use_markup (GTK_LABEL (tbw->class), TRUE);
-    gtk_label_set_justify (GTK_LABEL (tbw->class), GTK_JUSTIFY_CENTER);
-    gtk_box_pack_start (GTK_BOX (vbox), tbw->class, TRUE, TRUE, 0);
-
-    frame = gtk_frame_new (NULL);
-    gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN);
-    gtk_container_set_border_width (GTK_CONTAINER (frame), 0);
-    gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0);
+    gtk_container_add (GTK_CONTAINER (tbw), vbox);
 
     tbw->label = gtk_label_new ("");
-    gtk_label_set_use_markup (GTK_LABEL (tbw->label), FALSE);
+    gtk_label_set_use_markup (GTK_LABEL (tbw->label), TRUE);
     gtk_label_set_justify (GTK_LABEL (tbw->label), GTK_JUSTIFY_CENTER);
-    gtk_label_set_use_markup (GTK_LABEL (tbw->class), TRUE);
-    gtk_box_pack_start (GTK_BOX (vbox), tbw->label, TRUE, TRUE, 0);
-    gtk_widget_set_size_request (GTK_WIDGET (tbw->label), 240, -1);
+    gtk_label_set_ellipsize (GTK_LABEL (tbw->label), PANGO_ELLIPSIZE_END);
+    //gtk_widget_set_size_request (GTK_WIDGET (tbw->label), 240, -1);
+    gtk_box_pack_end (GTK_BOX (vbox), tbw->label, TRUE, TRUE, 0);
 
     windowlist = createWindowlist (screen_info, tbw);
     tbw->container = windowlist;
-    gtk_container_add (GTK_CONTAINER (frame), windowlist);
-
-    color = get_color (GTK_WIDGET (tbw), GTK_STATE_SELECTED);
-    if (color)
-    {
-        gtk_widget_modify_bg (colorbox1, GTK_STATE_NORMAL, color);
-    }
+    gtk_box_pack_start (GTK_BOX (vbox), windowlist, TRUE, TRUE, 0);
 
 #if 0
     if (GTK_CHECK_VERSION (2, 6, 2))
     {
         gtk_label_set_ellipsize (GTK_LABEL (tbw->label), PANGO_ELLIPSIZE_END);
-        gtk_label_set_ellipsize (GTK_LABEL (tbw->class), PANGO_ELLIPSIZE_END);
     }
 #endif
 
@@ -452,7 +410,7 @@ static Client *
 tabwinChange2Selected (Tabwin *t, GList *selected)
 {
     GList *tabwin_list, *widgets;
-    GtkWidget *icon;
+    GtkWidget *window_button;
     TabwinWidget *tbw;
 
     t->selected = selected;
@@ -461,10 +419,12 @@ tabwinChange2Selected (Tabwin *t, GList *selected)
         tbw = (TabwinWidget *) tabwin_list->data;
         for (widgets = tbw->widgets; widgets; widgets = g_list_next (widgets))
         {
-            icon = GTK_WIDGET (widgets->data);
-            if (((Client *) g_object_get_data (G_OBJECT(icon), "client-ptr-val")) == t->selected->data)
+            window_button = GTK_WIDGET (widgets->data);
+            gtk_button_set_relief (GTK_BUTTON (window_button), GTK_RELIEF_NONE);
+            gtk_button_set_label (GTK_BUTTON (window_button), "");
+            if (((Client *) g_object_get_data (G_OBJECT(window_button), "client-ptr-val")) == t->selected->data)
             {
-                    tabwinSetSelected (tbw, icon);
+                    tabwinSetSelected (tbw, window_button);
                     gtk_widget_queue_draw (GTK_WIDGET(tbw));
             }
         }
diff --git a/src/tabwin.h b/src/tabwin.h
index 3511cca..ee1cadb 100644
--- a/src/tabwin.h
+++ b/src/tabwin.h
@@ -51,7 +51,6 @@ struct _TabwinWidget
 
     /* these don't have to be */
     Tabwin *tabwin;
-    GtkWidget *class;
     GtkWidget *label;
     GtkWidget *container;
     GtkWidget *selected;


More information about the Xfce4-commits mailing list