Author: nick Date: 2007-11-18 17:19:08 +0000 (Sun, 18 Nov 2007) New Revision: 26369
Modified: xfce4-panel/trunk/plugins/systray/xfce-tray-dialogs.c xfce4-panel/trunk/plugins/systray/xfce-tray-plugin.c xfce4-panel/trunk/plugins/systray/xfce-tray-plugin.h xfce4-panel/trunk/plugins/systray/xfce-tray-widget.c Log: * Fix issues with 2.10 invisible icons. They are now properly hidden (not even the 1px icon that appeared in the old version of the tray). * The hack above also fixed initial icon requests :-), so the previous commit was partly removed. Modified: xfce4-panel/trunk/plugins/systray/xfce-tray-dialogs.c =================================================================== --- xfce4-panel/trunk/plugins/systray/xfce-tray-dialogs.c 2007-11-18 15:05:30 UTC (rev 26368) +++ xfce4-panel/trunk/plugins/systray/xfce-tray-dialogs.c 2007-11-18 17:19:08 UTC (rev 26369) @@ -188,9 +188,6 @@ /* set rows */ xfce_tray_widget_set_rows (XFCE_TRAY_WIDGET (plugin->tray), value); - - /* reset initial icon size */ - plugin->initial_size = -1; } Modified: xfce4-panel/trunk/plugins/systray/xfce-tray-plugin.c =================================================================== --- xfce4-panel/trunk/plugins/systray/xfce-tray-plugin.c 2007-11-18 15:05:30 UTC (rev 26368) +++ xfce4-panel/trunk/plugins/systray/xfce-tray-plugin.c 2007-11-18 17:19:08 UTC (rev 26369) @@ -93,8 +93,10 @@ /* message */ if (running) + { xfce_tray_plugin_message (GTK_MESSAGE_INFO, screen, _("There is already a system tray running on this screen")); + } return (!running); } @@ -178,13 +180,6 @@ { gchar *name; - /* initialize the size when needed */ - if (G_UNLIKELY (plugin->initial_size == -1)) - xfce_tray_plugin_size_changed (plugin, xfce_panel_plugin_get_size (plugin->panel_plugin)); - - /* set size request */ - gtk_widget_set_size_request (icon, plugin->initial_size, plugin->initial_size); - /* get the application name */ name = xfce_tray_manager_get_application_name (icon); @@ -241,7 +236,6 @@ plugin->panel_plugin = panel_plugin; plugin->manager = NULL; plugin->show_frame = TRUE; - plugin->initial_size = -1; /* create the frame */ plugin->frame = gtk_frame_new (NULL); @@ -318,22 +312,9 @@ xfce_tray_plugin_size_changed (XfceTrayPlugin *plugin, guint size) { - gint n_rows; - /* set the frame border size */ gtk_container_set_border_width (GTK_CONTAINER (plugin->frame), size > SMALL_PANEL_SIZE ? 1 : 0); - /* get tray rows */ - n_rows = xfce_tray_widget_get_rows (XFCE_TRAY_WIDGET (plugin->tray)); - - /* calculate the initial tray icon size */ - plugin->initial_size = (size - - 2 * GTK_CONTAINER (plugin->frame)->border_width - - 2 * GTK_CONTAINER (plugin->tray)->border_width - - 2 * MAX (plugin->frame->style->xthickness, plugin->frame->style->ythickness) - - XFCE_TRAY_WIDGET_SPACING * (n_rows - 1)) - / n_rows; - /* we handled the size of the plugin */ return TRUE; } Modified: xfce4-panel/trunk/plugins/systray/xfce-tray-plugin.h =================================================================== --- xfce4-panel/trunk/plugins/systray/xfce-tray-plugin.h 2007-11-18 15:05:30 UTC (rev 26368) +++ xfce4-panel/trunk/plugins/systray/xfce-tray-plugin.h 2007-11-18 17:19:08 UTC (rev 26369) @@ -34,9 +34,6 @@ GtkWidget *frame; GtkWidget *tray; - /* initial icon size */ - gint initial_size; - /* properties */ guint show_frame : 1; }; Modified: xfce4-panel/trunk/plugins/systray/xfce-tray-widget.c =================================================================== --- xfce4-panel/trunk/plugins/systray/xfce-tray-widget.c 2007-11-18 15:05:30 UTC (rev 26368) +++ xfce4-panel/trunk/plugins/systray/xfce-tray-widget.c 2007-11-18 17:19:08 UTC (rev 26369) @@ -108,6 +108,9 @@ /* whether it could be hidden */ guint hidden : 1; + /* whether the icon is invisible */ + guint invisible : 1; + /* the name of the applcation */ gchar *name; }; @@ -235,17 +238,43 @@ { child_info = li->data; - /* ship hidden icons if needed */ - if (child_info->hidden == FALSE || tray->show_hidden == TRUE) + /* get the icons size request */ + gtk_widget_size_request (child_info->widget, &child_requisition); + + if (G_UNLIKELY (child_requisition.width == 1 || child_requisition.height == 1)) { - /* get the icons size request */ - gtk_widget_size_request (child_info->widget, &child_requisition); + /* don't do anything with already invisible icons */ + if (child_info->invisible == FALSE) + { + /* this icon should not be visible */ + child_info->invisible = TRUE; - /* get the child size (smallest icon) */ - child_size = MIN (child_size, MAX (child_requisition.width, child_requisition.height)); + /* decrease the hidden counter if needed */ + if (child_info->hidden) + tray->n_hidden_childeren--; + } + } + else + { + /* restore icon if it was previously invisible */ + if (G_UNLIKELY (child_info->invisible)) + { + /* visible icon */ + child_info->invisible = FALSE; - /* number of visible childeren */ - n_visible_childeren++; + /* update counter */ + if (child_info->hidden) + tray->n_hidden_childeren++; + } + + if (child_info->hidden == FALSE || tray->show_hidden == TRUE) + { + /* update the child size (smallest icon) */ + child_size = MIN (child_size, MAX (child_requisition.width, child_requisition.height)); + + /* increase number of visible childeren */ + n_visible_childeren++; + } } } @@ -366,7 +395,7 @@ { child_info = li->data; - if (child_info->hidden && !tray->show_hidden) + if (child_info->invisible || (child_info->hidden && !tray->show_hidden)) { /* put icons offscreen */ child_allocation.x = child_allocation.y = XFCE_TRAY_WIDGET_OFFSCREEN; @@ -401,7 +430,6 @@ /* allocate widget size */ gtk_widget_size_allocate (child_info->widget, &child_allocation); - gtk_widget_set_size_request (child_info->widget, child_size, child_size); } } @@ -441,7 +469,7 @@ need_resize = !child_info->hidden; /* update hidden counter */ - if (child_info->hidden) + if (child_info->hidden && !child_info->invisible) tray->n_hidden_childeren--; /* remove from list */ @@ -596,6 +624,7 @@ /* create child info */ child_info = panel_slice_new (XfceTrayWidgetChild); child_info->widget = child; + child_info->invisible = FALSE; child_info->name = g_strdup (name); child_info->hidden = xfce_tray_widget_name_hidden (tray, child_info->name); @@ -714,7 +743,7 @@ child_info->hidden = xfce_tray_widget_name_hidden (tray, child_info->name); /* increase counter if needed */ - if (child_info->hidden) + if (child_info->hidden && !child_info->invisible) n_hidden_childeren++; } _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits