diff options
Diffstat (limited to 'src/ui/tabpopup.c')
-rw-r--r-- | src/ui/tabpopup.c | 948 |
1 files changed, 0 insertions, 948 deletions
diff --git a/src/ui/tabpopup.c b/src/ui/tabpopup.c deleted file mode 100644 index f38bb174..00000000 --- a/src/ui/tabpopup.c +++ /dev/null @@ -1,948 +0,0 @@ -/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ - -/* Metacity popup window thing showing windows you can tab to */ - -/* - * Copyright (C) 2001 Havoc Pennington - * Copyright (C) 2002 Red Hat, Inc. - * Copyright (C) 2005 Elijah Newren - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - * 02111-1307, USA. - */ - -#include <config.h> - -#include "util.h" -#include "core.h" -#include "tabpopup.h" -/* FIXME these two includes are 100% broken ... - */ -#include "../core/workspace.h" -#include "../core/frame-private.h" -#include "draw-workspace.h" -#include <gtk/gtk.h> -#include <math.h> - -#define OUTSIDE_SELECT_RECT 2 -#define INSIDE_SELECT_RECT 2 - -typedef struct _TabEntry TabEntry; - -struct _TabEntry -{ - MetaTabEntryKey key; - char *title; - GdkPixbuf *icon, *dimmed_icon; - GtkWidget *widget; - GdkRectangle rect; - GdkRectangle inner_rect; - guint blank : 1; -}; - -struct _MetaTabPopup -{ - GtkWidget *window; - GtkWidget *label; - GList *current; - GList *entries; - TabEntry *current_selected_entry; - GtkWidget *outline_window; - gboolean outline; -}; - -static GtkWidget* selectable_image_new (GdkPixbuf *pixbuf); -static void select_image (GtkWidget *widget); -static void unselect_image (GtkWidget *widget); - -static GtkWidget* selectable_workspace_new (MetaWorkspace *workspace); -static void select_workspace (GtkWidget *widget); -static void unselect_workspace (GtkWidget *widget); - -static gboolean -outline_window_expose (GtkWidget *widget, - GdkEventExpose *event, - gpointer data) -{ - MetaTabPopup *popup; - TabEntry *te; - - popup = data; - - if (!popup->outline || popup->current_selected_entry == NULL) - return FALSE; - - te = popup->current_selected_entry; - - gdk_draw_rectangle (widget->window, - widget->style->white_gc, - FALSE, - 0, 0, - te->rect.width - 1, - te->rect.height - 1); - - gdk_draw_rectangle (widget->window, - widget->style->white_gc, - FALSE, - te->inner_rect.x - 1, te->inner_rect.y - 1, - te->inner_rect.width + 1, - te->inner_rect.height + 1); - - return FALSE; -} - -static GdkPixbuf* -dimm_icon (GdkPixbuf *pixbuf) -{ - int x, y, pixel_stride, row_stride; - guchar *row, *pixels; - int w, h; - GdkPixbuf *dimmed_pixbuf; - - if (gdk_pixbuf_get_has_alpha (pixbuf)) - { - dimmed_pixbuf = gdk_pixbuf_copy (pixbuf); - } - else - { - dimmed_pixbuf = gdk_pixbuf_add_alpha (pixbuf, FALSE, 0, 0, 0); - } - - w = gdk_pixbuf_get_width (dimmed_pixbuf); - h = gdk_pixbuf_get_height (dimmed_pixbuf); - - pixel_stride = 4; - - row = gdk_pixbuf_get_pixels (dimmed_pixbuf); - row_stride = gdk_pixbuf_get_rowstride (dimmed_pixbuf); - - for (y = 0; y < h; y++) - { - pixels = row; - for (x = 0; x < w; x++) - { - pixels[3] /= 2; - pixels += pixel_stride; - } - row += row_stride; - } - return dimmed_pixbuf; -} - -static TabEntry* -tab_entry_new (const MetaTabEntry *entry, - gint screen_width, - gboolean outline) -{ - TabEntry *te; - - te = g_new (TabEntry, 1); - te->key = entry->key; - te->title = NULL; - if (entry->title) - { - gchar *str; - gchar *tmp; - gchar *formatter = "%s"; - - str = meta_g_utf8_strndup (entry->title, 4096); - - if (entry->hidden) - { - formatter = "[%s]"; - } - - tmp = g_markup_printf_escaped (formatter, str); - g_free (str); - str = tmp; - - if (entry->demands_attention) - { - /* Escape the whole line of text then markup the text and - * copy it back into the original buffer. - */ - tmp = g_strdup_printf ("<b>%s</b>", str); - g_free (str); - str = tmp; - } - - te->title=g_strdup(str); - - g_free (str); - } - te->widget = NULL; - te->icon = entry->icon; - te->blank = entry->blank; - te->dimmed_icon = NULL; - if (te->icon) - { - g_object_ref (G_OBJECT (te->icon)); - if (entry->hidden) - te->dimmed_icon = dimm_icon (entry->icon); - } - - if (outline) - { - te->rect.x = entry->rect.x; - te->rect.y = entry->rect.y; - te->rect.width = entry->rect.width; - te->rect.height = entry->rect.height; - - te->inner_rect.x = entry->inner_rect.x; - te->inner_rect.y = entry->inner_rect.y; - te->inner_rect.width = entry->inner_rect.width; - te->inner_rect.height = entry->inner_rect.height; - } - return te; -} - -MetaTabPopup* -meta_ui_tab_popup_new (const MetaTabEntry *entries, - int screen_number, - int entry_count, - int width, - gboolean outline) -{ - MetaTabPopup *popup; - int i, left, right, top, bottom; - int height; - GtkWidget *table; - GtkWidget *vbox; - GtkWidget *align; - GList *tmp; - GtkWidget *frame; - int max_label_width; /* the actual max width of the labels we create */ - AtkObject *obj; - GdkScreen *screen; - int screen_width; - - popup = g_new (MetaTabPopup, 1); - - popup->outline_window = gtk_window_new (GTK_WINDOW_POPUP); - - screen = gdk_display_get_screen (gdk_display_get_default (), - screen_number); - gtk_window_set_screen (GTK_WINDOW (popup->outline_window), - screen); - - gtk_widget_set_app_paintable (popup->outline_window, TRUE); - gtk_widget_realize (popup->outline_window); - - g_signal_connect (G_OBJECT (popup->outline_window), "expose_event", - G_CALLBACK (outline_window_expose), popup); - - popup->window = gtk_window_new (GTK_WINDOW_POPUP); - - gtk_window_set_screen (GTK_WINDOW (popup->window), - screen); - - gtk_window_set_position (GTK_WINDOW (popup->window), - GTK_WIN_POS_CENTER_ALWAYS); - /* enable resizing, to get never-shrink behavior */ - gtk_window_set_resizable (GTK_WINDOW (popup->window), - TRUE); - popup->current = NULL; - popup->entries = NULL; - popup->current_selected_entry = NULL; - popup->outline = outline; - - screen_width = gdk_screen_get_width (screen); - for (i = 0; i < entry_count; ++i) - { - TabEntry* new_entry = tab_entry_new (&entries[i], screen_width, outline); - popup->entries = g_list_prepend (popup->entries, new_entry); - } - - popup->entries = g_list_reverse (popup->entries); - - g_assert (width > 0); - height = i / width; - if (i % width) - height += 1; - - table = gtk_table_new (height, width, FALSE); - vbox = gtk_vbox_new (FALSE, 0); - - frame = gtk_frame_new (NULL); - gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); - gtk_container_set_border_width (GTK_CONTAINER (table), 1); - gtk_container_add (GTK_CONTAINER (popup->window), - frame); - gtk_container_add (GTK_CONTAINER (frame), - vbox); - - align = gtk_alignment_new (0.5, 0.5, 0.0, 0.0); - - gtk_box_pack_start (GTK_BOX (vbox), align, TRUE, TRUE, 0); - - gtk_container_add (GTK_CONTAINER (align), - table); - - popup->label = gtk_label_new (""); - - /* Set the accessible role of the label to a status bar so it - * will emit name changed events that can be used by screen - * readers. - */ - obj = gtk_widget_get_accessible (popup->label); - atk_object_set_role (obj, ATK_ROLE_STATUSBAR); - - gtk_misc_set_padding (GTK_MISC (popup->label), 3, 3); - - gtk_box_pack_end (GTK_BOX (vbox), popup->label, FALSE, FALSE, 0); - - max_label_width = 0; - top = 0; - bottom = 1; - tmp = popup->entries; - - while (tmp && top < height) - { - left = 0; - right = 1; - - while (tmp && left < width) - { - GtkWidget *image; - GtkRequisition req; - - TabEntry *te; - - te = tmp->data; - - if (te->blank) - { - /* just stick a widget here to avoid special cases */ - image = gtk_alignment_new (0.0, 0.0, 0.0, 0.0); - } - else if (outline) - { - if (te->dimmed_icon) - { - image = selectable_image_new (te->dimmed_icon); - } - else - { - image = selectable_image_new (te->icon); - } - - gtk_misc_set_padding (GTK_MISC (image), - INSIDE_SELECT_RECT + OUTSIDE_SELECT_RECT + 1, - INSIDE_SELECT_RECT + OUTSIDE_SELECT_RECT + 1); - gtk_misc_set_alignment (GTK_MISC (image), 0.5, 0.5); - } - else - { - image = selectable_workspace_new ((MetaWorkspace *) te->key); - } - - te->widget = image; - - gtk_table_attach (GTK_TABLE (table), - te->widget, - left, right, top, bottom, - 0, 0, - 0, 0); - - /* Efficiency rules! */ - gtk_label_set_markup (GTK_LABEL (popup->label), - te->title); - gtk_widget_size_request (popup->label, &req); - max_label_width = MAX (max_label_width, req.width); - - tmp = tmp->next; - - ++left; - ++right; - } - - ++top; - ++bottom; - } - - /* remove all the temporary text */ - gtk_label_set_text (GTK_LABEL (popup->label), ""); - /* Make it so that we ellipsize if the text is too long */ - gtk_label_set_ellipsize (GTK_LABEL (popup->label), PANGO_ELLIPSIZE_END); - - /* Limit the window size to no bigger than screen_width/4 */ - if (max_label_width>(screen_width/4)) - { - max_label_width = screen_width/4; - } - - max_label_width += 20; /* add random padding */ - - gtk_window_set_default_size (GTK_WINDOW (popup->window), - max_label_width, - -1); - - return popup; -} - -static void -free_tab_entry (gpointer data, gpointer user_data) -{ - TabEntry *te; - - te = data; - - g_free (te->title); - if (te->icon) - g_object_unref (G_OBJECT (te->icon)); - if (te->dimmed_icon) - g_object_unref (G_OBJECT (te->dimmed_icon)); - - g_free (te); -} - -void -meta_ui_tab_popup_free (MetaTabPopup *popup) -{ - meta_verbose ("Destroying tab popup window\n"); - - gtk_widget_destroy (popup->outline_window); - gtk_widget_destroy (popup->window); - - g_list_foreach (popup->entries, free_tab_entry, NULL); - - g_list_free (popup->entries); - - g_free (popup); -} - -void -meta_ui_tab_popup_set_showing (MetaTabPopup *popup, - gboolean showing) -{ - if (showing) - { - gtk_widget_show_all (popup->window); - } - else - { - if (GTK_WIDGET_VISIBLE (popup->window)) - { - meta_verbose ("Hiding tab popup window\n"); - gtk_widget_hide (popup->window); - meta_core_increment_event_serial (gdk_display); - } - } -} - -static void -display_entry (MetaTabPopup *popup, - TabEntry *te) -{ - GdkRectangle rect; - GdkRegion *region; - GdkRegion *inner_region; - - - if (popup->current_selected_entry) - { - if (popup->outline) - unselect_image (popup->current_selected_entry->widget); - else - unselect_workspace (popup->current_selected_entry->widget); - } - - gtk_label_set_markup (GTK_LABEL (popup->label), te->title); - - if (popup->outline) - select_image (te->widget); - else - select_workspace (te->widget); - - if (popup->outline) - { - /* Do stuff behind gtk's back */ - gdk_window_hide (popup->outline_window->window); - meta_core_increment_event_serial (gdk_display); - - rect = te->rect; - rect.x = 0; - rect.y = 0; - - gdk_window_move_resize (popup->outline_window->window, - te->rect.x, te->rect.y, - te->rect.width, te->rect.height); - - gdk_window_set_background (popup->outline_window->window, - &popup->outline_window->style->black); - - region = gdk_region_rectangle (&rect); - inner_region = gdk_region_rectangle (&te->inner_rect); - gdk_region_subtract (region, inner_region); - gdk_region_destroy (inner_region); - - gdk_window_shape_combine_region (popup->outline_window->window, - region, - 0, 0); - - gdk_region_destroy (region); - - /* This should piss off gtk a bit, but we don't want to raise - * above the tab popup. So, instead of calling gtk_widget_show, - * we manually set the window as mapped and then manually map it - * with gdk functions. - */ - GTK_WIDGET_SET_FLAGS (popup->outline_window, GTK_MAPPED); - gdk_window_show_unraised (popup->outline_window->window); - } - - /* Must be before we handle an expose for the outline window */ - popup->current_selected_entry = te; -} - -void -meta_ui_tab_popup_forward (MetaTabPopup *popup) -{ - if (popup->current != NULL) - popup->current = popup->current->next; - - if (popup->current == NULL) - popup->current = popup->entries; - - if (popup->current != NULL) - { - TabEntry *te; - - te = popup->current->data; - - display_entry (popup, te); - } -} - -void -meta_ui_tab_popup_backward (MetaTabPopup *popup) -{ - if (popup->current != NULL) - popup->current = popup->current->prev; - - if (popup->current == NULL) - popup->current = g_list_last (popup->entries); - - if (popup->current != NULL) - { - TabEntry *te; - - te = popup->current->data; - - display_entry (popup, te); - } -} - -MetaTabEntryKey -meta_ui_tab_popup_get_selected (MetaTabPopup *popup) -{ - if (popup->current) - { - TabEntry *te; - - te = popup->current->data; - - return te->key; - } - else - return (MetaTabEntryKey)None; -} - -void -meta_ui_tab_popup_select (MetaTabPopup *popup, - MetaTabEntryKey key) -{ - GList *tmp; - - /* Note, "key" may not be in the list of entries; other code assumes - * it's OK to pass in a key that isn't. - */ - - tmp = popup->entries; - while (tmp != NULL) - { - TabEntry *te; - - te = tmp->data; - - if (te->key == key) - { - popup->current = tmp; - - display_entry (popup, te); - - return; - } - - tmp = tmp->next; - } -} - -#define META_TYPE_SELECT_IMAGE (meta_select_image_get_type ()) -#define META_SELECT_IMAGE(obj) (GTK_CHECK_CAST ((obj), META_TYPE_SELECT_IMAGE, MetaSelectImage)) - -typedef struct _MetaSelectImage MetaSelectImage; -typedef struct _MetaSelectImageClass MetaSelectImageClass; - -struct _MetaSelectImage -{ - GtkImage parent_instance; - guint selected : 1; -}; - -struct _MetaSelectImageClass -{ - GtkImageClass parent_class; -}; - - -static GType meta_select_image_get_type (void) G_GNUC_CONST; - -static GtkWidget* -selectable_image_new (GdkPixbuf *pixbuf) -{ - GtkWidget *w; - - w = g_object_new (meta_select_image_get_type (), NULL); - gtk_image_set_from_pixbuf (GTK_IMAGE (w), pixbuf); - - return w; -} - -static void -select_image (GtkWidget *widget) -{ - META_SELECT_IMAGE (widget)->selected = TRUE; - gtk_widget_queue_draw (widget); -} - -static void -unselect_image (GtkWidget *widget) -{ - META_SELECT_IMAGE (widget)->selected = FALSE; - gtk_widget_queue_draw (widget); -} - -static void meta_select_image_class_init (MetaSelectImageClass *klass); -static gboolean meta_select_image_expose_event (GtkWidget *widget, - GdkEventExpose *event); - -static GtkImageClass *parent_class; - -GType -meta_select_image_get_type (void) -{ - static GtkType image_type = 0; - - if (!image_type) - { - static const GTypeInfo image_info = - { - sizeof (MetaSelectImageClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) meta_select_image_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (MetaSelectImage), - 16, /* n_preallocs */ - (GInstanceInitFunc) NULL, - }; - - image_type = g_type_register_static (GTK_TYPE_IMAGE, "MetaSelectImage", &image_info, 0); - } - - return image_type; -} - -static void -meta_select_image_class_init (MetaSelectImageClass *klass) -{ - GtkWidgetClass *widget_class; - - parent_class = gtk_type_class (gtk_image_get_type ()); - - widget_class = GTK_WIDGET_CLASS (klass); - - widget_class->expose_event = meta_select_image_expose_event; -} - -static gboolean -meta_select_image_expose_event (GtkWidget *widget, - GdkEventExpose *event) -{ - if (META_SELECT_IMAGE (widget)->selected) - { - int x, y, w, h; - GtkMisc *misc; - - misc = GTK_MISC (widget); - - x = (widget->allocation.x * (1.0 - misc->xalign) + - (widget->allocation.x + widget->allocation.width - - (widget->requisition.width - misc->xpad * 2)) * - misc->xalign) + 0.5; - y = (widget->allocation.y * (1.0 - misc->yalign) + - (widget->allocation.y + widget->allocation.height - - (widget->requisition.height - misc->ypad * 2)) * - misc->yalign) + 0.5; - - x -= INSIDE_SELECT_RECT + 1; - y -= INSIDE_SELECT_RECT + 1; - - w = widget->requisition.width - OUTSIDE_SELECT_RECT * 2 - 1; - h = widget->requisition.height - OUTSIDE_SELECT_RECT * 2 - 1; - - gdk_draw_rectangle (widget->window, - widget->style->fg_gc[GTK_WIDGET_STATE (widget)], - FALSE, - x, y, w, h); - gdk_draw_rectangle (widget->window, - widget->style->fg_gc[GTK_WIDGET_STATE (widget)], - FALSE, - x - 1, y - 1, w + 2, h + 2); - -#if 0 - gdk_draw_rectangle (widget->window, - widget->style->bg_gc[GTK_STATE_SELECTED], - TRUE, - x, y, w, h); -#endif -#if 0 - gtk_paint_focus (widget->style, widget->window, - &event->area, widget, "meta-tab-image", - x, y, w, h); -#endif - } - - return GTK_WIDGET_CLASS (parent_class)->expose_event (widget, event); -} - -#define META_TYPE_SELECT_WORKSPACE (meta_select_workspace_get_type ()) -#define META_SELECT_WORKSPACE(obj) (GTK_CHECK_CAST ((obj), META_TYPE_SELECT_WORKSPACE, MetaSelectWorkspace)) - -typedef struct _MetaSelectWorkspace MetaSelectWorkspace; -typedef struct _MetaSelectWorkspaceClass MetaSelectWorkspaceClass; - -struct _MetaSelectWorkspace -{ - GtkDrawingArea parent_instance; - MetaWorkspace *workspace; - guint selected : 1; -}; - -struct _MetaSelectWorkspaceClass -{ - GtkDrawingAreaClass parent_class; -}; - - -static GType meta_select_workspace_get_type (void) G_GNUC_CONST; - -#define SELECT_OUTLINE_WIDTH 2 -#define MINI_WORKSPACE_WIDTH 48 - -static GtkWidget* -selectable_workspace_new (MetaWorkspace *workspace) -{ - GtkWidget *widget; - double screen_aspect; - - widget = g_object_new (meta_select_workspace_get_type (), NULL); - - screen_aspect = (double) workspace->screen->rect.height / - (double) workspace->screen->rect.width; - - /* account for select rect */ - gtk_widget_set_size_request (widget, - MINI_WORKSPACE_WIDTH + SELECT_OUTLINE_WIDTH * 2, - MINI_WORKSPACE_WIDTH * screen_aspect + SELECT_OUTLINE_WIDTH * 2); - - META_SELECT_WORKSPACE (widget)->workspace = workspace; - - return widget; -} - -static void -select_workspace (GtkWidget *widget) -{ - META_SELECT_WORKSPACE(widget)->selected = TRUE; - gtk_widget_queue_draw (widget); -} - -static void -unselect_workspace (GtkWidget *widget) -{ - META_SELECT_WORKSPACE (widget)->selected = FALSE; - gtk_widget_queue_draw (widget); -} - -static void meta_select_workspace_class_init (MetaSelectWorkspaceClass *klass); - -static gboolean meta_select_workspace_expose_event (GtkWidget *widget, - GdkEventExpose *event); - -GType -meta_select_workspace_get_type (void) -{ - static GtkType workspace_type = 0; - - if (!workspace_type) - { - static const GTypeInfo workspace_info = - { - sizeof (MetaSelectWorkspaceClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) meta_select_workspace_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (MetaSelectWorkspace), - 16, /* n_preallocs */ - (GInstanceInitFunc) NULL, - }; - - workspace_type = g_type_register_static (GTK_TYPE_DRAWING_AREA, - "MetaSelectWorkspace", - &workspace_info, - 0); - } - - return workspace_type; -} - -static void -meta_select_workspace_class_init (MetaSelectWorkspaceClass *klass) -{ - GtkWidgetClass *widget_class; - - widget_class = GTK_WIDGET_CLASS (klass); - - widget_class->expose_event = meta_select_workspace_expose_event; -} - -/** - * meta_convert_meta_to_wnck() converts a MetaWindow to a - * WnckWindowDisplayInfo window that is used to build a thumbnail of a - * workspace. - **/ -static WnckWindowDisplayInfo -meta_convert_meta_to_wnck (MetaWindow *window, MetaScreen *screen) -{ - WnckWindowDisplayInfo wnck_window; - wnck_window.icon = window->icon; - wnck_window.mini_icon = window->mini_icon; - - wnck_window.is_active = FALSE; - if (window == window->display->expected_focus_window) - wnck_window.is_active = TRUE; - - if (window->frame) - { - wnck_window.x = window->frame->rect.x; - wnck_window.y = window->frame->rect.y; - wnck_window.width = window->frame->rect.width; - wnck_window.height = window->frame->rect.height; - } - else - { - wnck_window.x = window->rect.x; - wnck_window.y = window->rect.y; - wnck_window.width = window->rect.width; - wnck_window.height = window->rect.height; - } - return wnck_window; -} - - -static gboolean -meta_select_workspace_expose_event (GtkWidget *widget, - GdkEventExpose *event) -{ - MetaWorkspace *workspace; - WnckWindowDisplayInfo *windows; - int i, n_windows; - GList *tmp, *list; - - workspace = META_SELECT_WORKSPACE (widget)->workspace; - - list = meta_stack_list_windows (workspace->screen->stack, workspace); - n_windows = g_list_length (list); - windows = g_new (WnckWindowDisplayInfo, n_windows); - - tmp = list; - i = 0; - while (tmp != NULL) - { - MetaWindow *window; - gboolean ignoreable_sticky; - - window = tmp->data; - - ignoreable_sticky = window->on_all_workspaces && - workspace != workspace->screen->active_workspace; - - if (window->skip_pager || - !meta_window_showing_on_its_workspace (window) || - window->unmaps_pending || - ignoreable_sticky) - { - --n_windows; - } - else - { - windows[i] = meta_convert_meta_to_wnck (window, workspace->screen); - i++; - } - tmp = tmp->next; - } - - g_list_free (list); - - wnck_draw_workspace (widget, - widget->window, - SELECT_OUTLINE_WIDTH, - SELECT_OUTLINE_WIDTH, - widget->allocation.width - SELECT_OUTLINE_WIDTH * 2, - widget->allocation.height - SELECT_OUTLINE_WIDTH * 2, - workspace->screen->rect.width, - workspace->screen->rect.height, - NULL, - (workspace->screen->active_workspace == workspace), - windows, - n_windows); - - g_free (windows); - - if (META_SELECT_WORKSPACE (widget)->selected) - { - i = SELECT_OUTLINE_WIDTH - 1; - while (i >= 0) - { - gdk_draw_rectangle (widget->window, - widget->style->fg_gc[GTK_WIDGET_STATE (widget)], - FALSE, - i, - i, - widget->allocation.width - i * 2 - 1, - widget->allocation.height - i * 2 - 1); - - --i; - } - } - - return TRUE; -} - |