diff options
Diffstat (limited to 'plugins/iconbox/iconbox.c')
-rw-r--r-- | plugins/iconbox/iconbox.c | 955 |
1 files changed, 0 insertions, 955 deletions
diff --git a/plugins/iconbox/iconbox.c b/plugins/iconbox/iconbox.c deleted file mode 100644 index fd7d71fb..00000000 --- a/plugins/iconbox/iconbox.c +++ /dev/null @@ -1,955 +0,0 @@ -/* $Id$ - * - * Copyright © 2005 Jasper Huijsmans <jasper@xfce.org> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Library 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 Library General Public License for more details. - * - * You should have received a copy of the GNU Library 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. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <math.h> -#include <gtk/gtk.h> - -#include <libwnck/libwnck.h> -#include <libxfce4util/libxfce4util.h> -#include <libxfcegui4/libxfcegui4.h> -#include <libwnck/window-action-menu.h> -#include <libxfce4panel/xfce-panel-plugin.h> -#include <libxfce4panel/xfce-panel-convenience.h> -#include <libxfce4panel/xfce-hvbox.h> - -#define N_ICONBOX_CONNECTIONS 4 -#define N_ICON_CONNECTIONS 4 -#define URGENT_TIMEOUT 500 - -typedef struct -{ - XfcePanelPlugin *plugin; - - WnckScreen *wnck_screen; - int connections[N_ICONBOX_CONNECTIONS]; - int screen_changed_id; - GtkWidget *box; - GtkWidget *handle; - GtkWidget *iconbox; - - GSList *iconlist; - GtkTooltips *icon_tooltips; - - int icon_size; - guint only_hidden:1; - guint all_workspaces:1; - guint expand:1; -} -Iconbox; - -typedef struct -{ - Iconbox *ib; - - WnckWindow *window; - int connections[N_ICON_CONNECTIONS]; - - GdkPixbuf *pb; - - GtkWidget *button; - GtkWidget *image; - gboolean was_minimized; - guint urgent_id; -} -Icon; - - -static void iconbox_properties_dialog (XfcePanelPlugin *plugin, - Iconbox *iconbox); - -static void iconbox_construct (XfcePanelPlugin *plugin); - - -/* -------------------------------------------------------------------- * - * Iconbox * - * -------------------------------------------------------------------- */ - -/* icons */ -static void -update_visibility (Icon *icon, WnckWorkspace *optional_active_ws) -{ - WnckWorkspace *ws; - - gdk_flush (); - - if (wnck_window_is_skip_tasklist (icon->window)) - { - gtk_widget_hide (icon->button); - return; - } - - if (icon->ib->only_hidden && !wnck_window_is_minimized (icon->window)) - { - gtk_widget_hide (icon->button); - return; - } - - if (optional_active_ws) - { - ws = optional_active_ws; - } - else - { - ws = wnck_screen_get_active_workspace - (wnck_window_get_screen (icon->window)); - } - - if (icon->ib->all_workspaces - || wnck_window_is_sticky (icon->window) - || ws == wnck_window_get_workspace (icon->window) - || wnck_window_or_transient_needs_attention (icon->window)) - { - gtk_widget_show (icon->button); - } - else - { - gtk_widget_hide (icon->button); - } -} - -static void -icon_update_image (Icon *icon) -{ - GdkPixbuf *scaled; - - g_return_if_fail (GDK_IS_PIXBUF (icon->pb)); - - if (wnck_window_is_minimized (icon->window)) - { - if (!icon->was_minimized) - { - /* copied from wnck-tasklist.c: dimm_icon */ - int x, y, w, h, pixel_stride, row_stride; - guchar *row, *pixels; - - if (gdk_pixbuf_get_has_alpha (icon->pb)) - scaled = gdk_pixbuf_copy (icon->pb); - else - scaled = gdk_pixbuf_add_alpha (icon->pb, FALSE, 0, 0, 0); - - w = gdk_pixbuf_get_width (scaled); - h = gdk_pixbuf_get_height (scaled); - - pixel_stride = 4; - - row = gdk_pixbuf_get_pixels (scaled); - row_stride = gdk_pixbuf_get_rowstride (scaled); - - for (y = 0; y < h; y++) - { - pixels = row; - - for (x = 0; x < w; x++) - { - pixels[3] /= 2; - - pixels += pixel_stride; - } - - row += row_stride; - } - - xfce_scaled_image_set_from_pixbuf (XFCE_SCALED_IMAGE (icon->image), - scaled); - - g_object_unref (G_OBJECT (scaled)); - - icon->was_minimized = TRUE; - } - } - else if (icon->was_minimized) - { - xfce_scaled_image_set_from_pixbuf (XFCE_SCALED_IMAGE (icon->image), - icon->pb); - - icon->was_minimized = FALSE; - } - - update_visibility (icon, NULL); -} - -/* blinking */ -static void -update_blink (Icon *icon, gboolean blink) -{ - GtkStyle *style; - GtkRcStyle *mod; - GdkColor c; - - style = gtk_widget_get_style (icon->button); - mod = gtk_widget_get_modifier_style (icon->button); - c = style->bg[GTK_STATE_SELECTED]; - - if (blink) - { - gtk_button_set_relief (GTK_BUTTON (icon->button), GTK_RELIEF_NORMAL); - - if(mod->color_flags[GTK_STATE_NORMAL] & GTK_RC_BG) - { - mod->color_flags[GTK_STATE_NORMAL] &= ~(GTK_RC_BG); - gtk_widget_modify_style(icon->button, mod); - } - else - { - mod->color_flags[GTK_STATE_NORMAL] |= GTK_RC_BG; - mod->bg[GTK_STATE_NORMAL] = c; - gtk_widget_modify_style(icon->button, mod); - } - } - else - { - gtk_button_set_relief (GTK_BUTTON (icon->button), GTK_RELIEF_NONE); - mod->color_flags[GTK_STATE_NORMAL] &= ~(GTK_RC_BG); - gtk_widget_modify_style(icon->button, mod); - } -} - -static gboolean -urgent_timeout (Icon *icon) -{ - update_visibility (icon, NULL); - update_blink (icon, TRUE); - return TRUE;; -} - -static void -queue_urgent_timeout (Icon *icon) -{ - if (icon->urgent_id == 0) - { - icon->urgent_id = - g_timeout_add (URGENT_TIMEOUT, (GSourceFunc)urgent_timeout, icon); - } -} - -static void -unqueue_urgent_timeout (Icon *icon) -{ - if (icon->urgent_id > 0) - { - g_source_remove (icon->urgent_id); - icon->urgent_id = 0; - if (icon->button) - { - update_blink (icon, FALSE); - update_visibility (icon, NULL); - } - } -} - -/* callbacks */ -static gboolean -icon_button_pressed (GtkWidget *button, GdkEventButton *ev, gpointer data) -{ - Icon *icon = (Icon *)data; - - if (ev->button == 1) - { - if (wnck_window_is_active (icon->window)) - { - wnck_window_minimize (icon->window); - } - else - { - WnckScreen *scr; - WnckWorkspace *aws, *ws; - - scr = wnck_window_get_screen (icon->window); - aws = wnck_screen_get_active_workspace (scr); - ws = wnck_window_get_workspace (icon->window); - - if (aws != ws) - { - wnck_workspace_activate (ws, ev->time); - } - wnck_window_activate (icon->window, ev->time); - } - - return TRUE; - } - else if (ev->button == 3) - { - GtkWidget *action_menu; - - action_menu = wnck_create_window_action_menu(icon->window); - - g_signal_connect(G_OBJECT(action_menu), "selection-done", - G_CALLBACK(gtk_widget_destroy), NULL); - - gtk_menu_popup(GTK_MENU(action_menu), NULL, NULL, NULL, NULL, - ev->button, ev->time); - - return TRUE; - } - - return FALSE; -} - -static void -icon_name_changed (WnckWindow *window, gpointer data) -{ - Icon *icon = (Icon *)data; - - gtk_tooltips_set_tip (icon->ib->icon_tooltips, icon->button, - wnck_window_get_name (window), NULL); -} - -static void -icon_state_changed (WnckWindow *window, WnckWindowState changed_mask, - WnckWindowState new_state, gpointer data) -{ - Icon *icon = (Icon *)data; - - if (changed_mask & WNCK_WINDOW_STATE_DEMANDS_ATTENTION - || changed_mask & WNCK_WINDOW_STATE_URGENT) - { - if (wnck_window_or_transient_needs_attention (window)) - { - queue_urgent_timeout (icon); - } - else - { - unqueue_urgent_timeout (icon); - } - } - - if (changed_mask & WNCK_WINDOW_STATE_MINIMIZED - || changed_mask & WNCK_WINDOW_STATE_SKIP_TASKLIST) - { - update_visibility (icon, NULL); - - icon_update_image (icon); - } -} - -static void -icon_workspace_changed (WnckWindow *window, gpointer data) -{ - Icon *icon = (Icon *)data; - - update_visibility (icon, NULL); -} - -static void -icon_icon_changed (WnckWindow *window, gpointer data) -{ - Icon *icon = (Icon *)data; - - if (icon->pb) - g_object_unref (G_OBJECT (icon->pb)); - - icon->pb = wnck_window_get_icon (icon->window); - - if (icon->pb) - g_object_ref (G_OBJECT (icon->pb)); - - /* make sure the icon is actually updated */ - icon->was_minimized = !wnck_window_is_minimized (icon->window); - icon_update_image (icon); -} - -static void -icon_destroy (Icon *icon) -{ - int i; - - unqueue_urgent_timeout (icon); - - for (i = 0; i < N_ICON_CONNECTIONS; i++) - { - if (icon->connections[i]) - g_signal_handler_disconnect (icon->window, icon->connections[i]); - - icon->connections[i] = 0; - } - - if (icon->pb) - g_object_unref (G_OBJECT (icon->pb)); - - panel_slice_free (Icon, icon); -} - -static Icon * -icon_new (WnckWindow *window, Iconbox *ib) -{ - Icon *icon = panel_slice_new0 (Icon); - int i = 0; - - icon->ib = ib; - - icon->window = window; - - icon->button = xfce_create_panel_toggle_button (); - - g_signal_connect (icon->button, "button-press-event", - G_CALLBACK (icon_button_pressed), icon); - - icon->image = xfce_scaled_image_new (); - gtk_widget_show (icon->image); - gtk_container_add (GTK_CONTAINER (icon->button), icon->image); - - icon->pb = wnck_window_get_icon (window); - if (icon->pb) - { - xfce_scaled_image_set_from_pixbuf (XFCE_SCALED_IMAGE (icon->image), - icon->pb); - g_object_ref (G_OBJECT (icon->pb)); - } - - icon->connections[i++] = - g_signal_connect (window, "name-changed", - G_CALLBACK (icon_name_changed), icon); - - icon->connections[i++] = - g_signal_connect (window, "state-changed", - G_CALLBACK (icon_state_changed), icon); - - icon->connections[i++] = - g_signal_connect (window, "workspace-changed", - G_CALLBACK (icon_workspace_changed), icon); - - icon->connections[i++] = - g_signal_connect (window, "icon-changed", - G_CALLBACK (icon_icon_changed), icon); - - g_assert (i == N_ICON_CONNECTIONS); - - if (wnck_window_is_skip_tasklist (window)) - { - return icon; - } - - icon_update_image (icon); - - gtk_tooltips_set_tip (ib->icon_tooltips, icon->button, - wnck_window_get_name (window), NULL); - - update_visibility (icon, NULL); - - return icon; -} - -/* iconlist */ -static void -iconbox_active_window_changed (WnckScreen *screen, -#ifdef HAVE_WNCK_TWO_POINT_TWENTY - WnckScreen *previous, -#endif - gpointer data) -{ - Iconbox *ib = (Iconbox *)data; - GSList *l; - WnckWindow *window = wnck_screen_get_active_window (screen); - - for (l = ib->iconlist; l != NULL; l = l->next) - { - Icon *icon = l->data; - - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (icon->button), - (window == icon->window)); - } -} - -static void -iconbox_active_workspace_changed (WnckScreen *screen, -#ifdef HAVE_WNCK_TWO_POINT_TWENTY - WnckWorkspace *previous_workspace, -#endif - gpointer data) -{ - Iconbox *ib = (Iconbox *)data; - GSList *l; - WnckWorkspace *ws = wnck_screen_get_active_workspace (screen); - - for (l = ib->iconlist; l != NULL; l = l->next) - { - Icon *icon = l->data; - - update_visibility (icon, ws); - } -} - -static void -iconbox_window_opened (WnckScreen *screen, WnckWindow *window, gpointer data) -{ - Iconbox *ib = (Iconbox *)data; - Icon *icon; - - icon = icon_new (window, ib); - - ib->iconlist = g_slist_append (ib->iconlist, icon); - - gtk_box_pack_start (GTK_BOX (ib->iconbox), icon->button, FALSE, FALSE, 0); - - if (wnck_window_or_transient_needs_attention (window)) - { - queue_urgent_timeout (icon); - } -} - -static void -iconbox_window_closed (WnckScreen *screen, WnckWindow *window, gpointer data) -{ - Iconbox *ib = (Iconbox *)data; - GSList *l; - - for (l = ib->iconlist; l != NULL; l = l->next) - { - Icon *icon = l->data; - - if (window == icon->window) - { - gtk_widget_destroy (icon->button); - icon->button = NULL; - icon_destroy (icon); - - ib->iconlist = g_slist_delete_link (ib->iconlist, l); - - break; - } - } -} - -static void -iconbox_init_icons (Iconbox * ib) -{ - int i = 0; - GList *windows, *l; - - wnck_screen_force_update (ib->wnck_screen); - - ib->connections[i++] = - g_signal_connect (ib->wnck_screen, "active_window_changed", - G_CALLBACK (iconbox_active_window_changed), - ib); - - ib->connections[i++] = - g_signal_connect (ib->wnck_screen, "active_workspace_changed", - G_CALLBACK (iconbox_active_workspace_changed), - ib); - - ib->connections[i++] = - g_signal_connect (ib->wnck_screen, "window_opened", - G_CALLBACK (iconbox_window_opened), - ib); - - ib->connections[i++] = - g_signal_connect (ib->wnck_screen, "window_closed", - G_CALLBACK (iconbox_window_closed), - ib); - - g_assert (i == N_ICONBOX_CONNECTIONS); - - windows = wnck_screen_get_windows (ib->wnck_screen); - - for (l = windows; l != NULL; l = l->next) - { - WnckWindow *w = l->data; - - iconbox_window_opened (ib->wnck_screen, w, ib); - } - - iconbox_active_window_changed (ib->wnck_screen, -#ifdef HAVE_WNCK_TWO_POINT_TWENTY - NULL, -#endif - ib); -} - -/* cleanup */ -static void -cleanup_icons (Iconbox *ib) -{ - int i; - GSList *l; - - for (i = 0; i < N_ICONBOX_CONNECTIONS; i++) - { - if (ib->connections[i]) - g_signal_handler_disconnect (ib->wnck_screen, ib->connections[i]); - - ib->connections[i] = 0; - } - - for (l = ib->iconlist; l != NULL; l = l->next) - { - icon_destroy ((Icon *)l->data); - } - - g_slist_free (ib->iconlist); - ib->iconlist = NULL; -} - -static void -cleanup_iconbox (Iconbox *ib) -{ - cleanup_icons (ib); - - g_object_unref (G_OBJECT (ib->icon_tooltips)); - - panel_slice_free (Iconbox, ib); -} - - -/* -------------------------------------------------------------------- * - * Panel Plugin Interface * - * -------------------------------------------------------------------- */ - -/* Register with the panel */ - -XFCE_PANEL_PLUGIN_REGISTER_INTERNAL (iconbox_construct); - - -/* Interface Implementation */ - -static void -iconbox_orientation_changed (XfcePanelPlugin *plugin, - GtkOrientation orientation, - Iconbox *iconbox) -{ - xfce_hvbox_set_orientation (XFCE_HVBOX(iconbox->box), orientation); - xfce_hvbox_set_orientation (XFCE_HVBOX(iconbox->iconbox), orientation); - - gtk_widget_queue_draw (iconbox->handle); -} - -static gboolean -iconbox_set_size (XfcePanelPlugin *plugin, int size, Iconbox *ib) -{ - GSList *l; - Icon *icon = ib->iconlist ? ib->iconlist->data : NULL; - GtkWidget *widget = icon ? icon->button : ib->iconbox; - - if (xfce_panel_plugin_get_orientation (plugin) == - GTK_ORIENTATION_HORIZONTAL) - { - ib->icon_size = size - 2 * widget->style->xthickness - 2; - gtk_widget_set_size_request (GTK_WIDGET (plugin), - -1, size); - } - else - { - ib->icon_size = size - 2 * widget->style->ythickness - 2; - gtk_widget_set_size_request (GTK_WIDGET (plugin), - size, -1); - } - - for (l = ib->iconlist; l != NULL; l = l->next) - icon_update_image (l->data); - - return TRUE; -} - -static void -iconbox_free_data (XfcePanelPlugin *plugin, Iconbox *iconbox) -{ - GtkWidget *dlg = g_object_get_data (G_OBJECT (plugin), "dialog"); - - if (dlg) - gtk_widget_destroy (dlg); - - g_signal_handler_disconnect (plugin, iconbox->screen_changed_id); - - cleanup_iconbox (iconbox); -} - -static void -iconbox_read_rc_file (XfcePanelPlugin *plugin, Iconbox *iconbox) -{ - char *file; - XfceRc *rc; - int only_hidden = 0; - int all_workspaces = 0; - int expand = 1; - - if ((file = xfce_panel_plugin_lookup_rc_file (plugin)) != NULL) - { - rc = xfce_rc_simple_open (file, TRUE); - g_free (file); - - if (rc != NULL) - { - only_hidden = xfce_rc_read_int_entry (rc, "only_hidden", 0); - all_workspaces = xfce_rc_read_int_entry (rc, "all_workspaces", 0); - expand = xfce_rc_read_int_entry (rc, "expand", 1); - xfce_rc_close (rc); - } - } - - iconbox->only_hidden = (only_hidden == 1); - iconbox->all_workspaces = (all_workspaces == 1); - iconbox->expand = (expand != 0); -} - -static void -iconbox_write_rc_file (XfcePanelPlugin *plugin, Iconbox *iconbox) -{ - char *file; - XfceRc *rc; - - if (!(file = xfce_panel_plugin_save_location (plugin, TRUE))) - return; - - rc = xfce_rc_simple_open (file, FALSE); - g_free (file); - - if (!rc) - return; - - xfce_rc_write_int_entry (rc, "only_hidden", iconbox->only_hidden); - xfce_rc_write_int_entry (rc, "all_workspaces", iconbox->all_workspaces); - xfce_rc_write_int_entry (rc, "expand", iconbox->expand); - - xfce_rc_close (rc); -} - -/* create widgets and connect to signals */ -static gboolean -handle_expose (GtkWidget *widget, GdkEventExpose *ev, Iconbox *iconbox) -{ - if (GTK_WIDGET_DRAWABLE (widget)) - { - GtkAllocation *allocation = &(widget->allocation); - int x, y, w, h; - gboolean horizontal; - - horizontal = (xfce_panel_plugin_get_orientation (iconbox->plugin) - == GTK_ORIENTATION_HORIZONTAL); - - x = allocation->x; - y = allocation->y; - w = allocation->width; - h = allocation->height; - - if (horizontal) - { - y += widget->style->ythickness; - h -= 2 * widget->style->ythickness; - } - else - { - x += widget->style->xthickness; - w -= 2 * widget->style->xthickness; - } - - gtk_paint_handle (widget->style, widget->window, - GTK_WIDGET_STATE (widget), GTK_SHADOW_NONE, - &(ev->area), widget, "handlebox", - x, y, w, h, - horizontal ? GTK_ORIENTATION_VERTICAL : - GTK_ORIENTATION_HORIZONTAL); - - return TRUE; - } - - return FALSE; -} - -static void -iconbox_screen_changed (GtkWidget *plugin, GdkScreen *screen, Iconbox *ib) -{ - if (!screen) - return; - - gtk_container_foreach (GTK_CONTAINER (ib->iconbox), - (GtkCallback) gtk_widget_destroy, NULL); - cleanup_icons (ib); - - ib->wnck_screen = wnck_screen_get (gdk_screen_get_number (screen)); - - iconbox_init_icons (ib); -} - -static void -iconbox_construct (XfcePanelPlugin *plugin) -{ - Iconbox *iconbox = panel_slice_new0 (Iconbox); - - iconbox->plugin = plugin; - - iconbox_read_rc_file (plugin, iconbox); - - xfce_panel_plugin_set_expand (plugin, iconbox->expand); - - iconbox->box = xfce_hvbox_new (xfce_panel_plugin_get_orientation (plugin), - FALSE, 0); - gtk_container_set_reallocate_redraws (GTK_CONTAINER (iconbox->box), TRUE); - gtk_widget_show (iconbox->box); - gtk_container_add (GTK_CONTAINER (plugin), iconbox->box); - - iconbox->handle = gtk_alignment_new (0, 0, 0, 0); - gtk_widget_set_size_request (iconbox->handle, 8, 8); - gtk_widget_show (iconbox->handle); - gtk_box_pack_start (GTK_BOX (iconbox->box), iconbox->handle, - FALSE, FALSE, 0); - - xfce_panel_plugin_add_action_widget (plugin, iconbox->handle); - - g_signal_connect (iconbox->handle, "expose-event", - G_CALLBACK (handle_expose), iconbox); - - iconbox->iconbox = - xfce_hvbox_new (xfce_panel_plugin_get_orientation (plugin), FALSE, 0); - gtk_widget_show (iconbox->iconbox); - gtk_box_pack_start (GTK_BOX (iconbox->box), iconbox->iconbox, - FALSE, FALSE, 0); - - iconbox->icon_tooltips = gtk_tooltips_new (); - g_object_ref (G_OBJECT (iconbox->icon_tooltips)); - gtk_object_sink (GTK_OBJECT (iconbox->icon_tooltips)); - - g_signal_connect (plugin, "orientation-changed", - G_CALLBACK (iconbox_orientation_changed), iconbox); - - g_signal_connect (plugin, "size-changed", - G_CALLBACK (iconbox_set_size), iconbox); - - g_signal_connect (plugin, "free-data", - G_CALLBACK (iconbox_free_data), iconbox); - - g_signal_connect (plugin, "save", - G_CALLBACK (iconbox_write_rc_file), iconbox); - - xfce_panel_plugin_menu_show_configure (plugin); - g_signal_connect (plugin, "configure-plugin", - G_CALLBACK (iconbox_properties_dialog), iconbox); - - iconbox->screen_changed_id = - g_signal_connect (plugin, "screen-changed", - G_CALLBACK (iconbox_screen_changed), iconbox); - - iconbox_screen_changed (GTK_WIDGET (plugin), - gtk_widget_get_screen (GTK_WIDGET (plugin)), - iconbox); -} - -/* -------------------------------------------------------------------- * - * Configuration Dialog * - * -------------------------------------------------------------------- */ - -static void -only_hidden_toggled (GtkToggleButton *tb, Iconbox *ib) -{ - GSList *l; - - ib->only_hidden = gtk_toggle_button_get_active (tb); - - for (l = ib->iconlist; l != NULL; l = l->next) - { - Icon *icon = l->data; - - update_visibility (icon, NULL); - } -} - -static void -all_workspaces_toggled (GtkToggleButton *tb, Iconbox *ib) -{ - GSList *l; - - ib->all_workspaces = gtk_toggle_button_get_active (tb); - - for (l = ib->iconlist; l != NULL; l = l->next) - { - Icon *icon = l->data; - - update_visibility (icon, NULL); - } -} - -static void -expand_toggled (GtkToggleButton *tb, Iconbox *ib) -{ - ib->expand = gtk_toggle_button_get_active (tb); - - xfce_panel_plugin_set_expand (ib->plugin, ib->expand); -} - -static void -iconbox_dialog_response (GtkWidget *dlg, int reponse, - Iconbox *ib) -{ - g_object_set_data (G_OBJECT (ib->plugin), "dialog", NULL); - - gtk_widget_destroy (dlg); - xfce_panel_plugin_unblock_menu (ib->plugin); - iconbox_write_rc_file (ib->plugin, ib); -} - -static void -iconbox_properties_dialog (XfcePanelPlugin *plugin, Iconbox *iconbox) -{ - GtkWidget *dlg, *vbox, *cb; - - xfce_panel_plugin_block_menu (plugin); - - dlg = xfce_titled_dialog_new_with_buttons (_("Icon Box"), NULL, - GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR, - GTK_STOCK_CLOSE, GTK_RESPONSE_OK, - NULL); - - gtk_window_set_screen (GTK_WINDOW (dlg), - gtk_widget_get_screen (GTK_WIDGET (plugin))); - - g_object_set_data (G_OBJECT (plugin), "dialog", dlg); - - gtk_window_set_position (GTK_WINDOW (dlg), GTK_WIN_POS_CENTER); - gtk_window_set_icon_name (GTK_WINDOW (dlg), GTK_STOCK_PROPERTIES); - - g_signal_connect (dlg, "response", G_CALLBACK (iconbox_dialog_response), - iconbox); - - vbox = gtk_vbox_new (FALSE, 6); - gtk_container_set_border_width (GTK_CONTAINER (vbox), 6); - gtk_widget_show (vbox); - gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), vbox, - TRUE, TRUE, 0); - - cb = gtk_check_button_new_with_mnemonic ( - _("Only show _minimized applications")); - gtk_widget_show (cb); - gtk_box_pack_start (GTK_BOX (vbox), cb, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb), - iconbox->only_hidden); - g_signal_connect (cb, "toggled", G_CALLBACK (only_hidden_toggled), - iconbox); - - cb = gtk_check_button_new_with_mnemonic ( - _("Show applications of _all workspaces")); - gtk_widget_show (cb); - gtk_box_pack_start (GTK_BOX (vbox), cb, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb), - iconbox->all_workspaces); - g_signal_connect (cb, "toggled", G_CALLBACK (all_workspaces_toggled), - iconbox); - - cb = gtk_check_button_new_with_mnemonic (_("Use all available _space")); - gtk_widget_show (cb); - gtk_box_pack_start (GTK_BOX (vbox), cb, FALSE, FALSE, 0); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cb), - iconbox->expand); - g_signal_connect (cb, "toggled", G_CALLBACK (expand_toggled), - iconbox); - - gtk_widget_show (dlg); -} |