summaryrefslogtreecommitdiff
path: root/plugins/separator/separator.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/separator/separator.c')
-rw-r--r--plugins/separator/separator.c575
1 files changed, 0 insertions, 575 deletions
diff --git a/plugins/separator/separator.c b/plugins/separator/separator.c
deleted file mode 100644
index 587a1d97..00000000
--- a/plugins/separator/separator.c
+++ /dev/null
@@ -1,575 +0,0 @@
-/* vim: set expandtab ts=8 sw=4: */
-
-/* $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 <gtk/gtk.h>
-
-#include <libxfce4util/libxfce4util.h>
-#include <libxfcegui4/libxfcegui4.h>
-#include <libxfce4panel/xfce-arrow-button.h>
-#include <libxfce4panel/xfce-panel-plugin.h>
-
-#define SEPARATOR_WIDTH 8
-#define SEP_START 0.15
-#define SEP_END 0.85
-
-typedef enum
-{
- SEP_SPACE,
- SEP_EXPAND,
- SEP_LINE,
- SEP_HANDLE,
- SEP_DOTS
-}
-SeparatorType;
-
-typedef struct _Separator
-{
- XfcePanelPlugin *plugin;
- SeparatorType type;
-}
-Separator;
-
-static void separator_properties_dialog (XfcePanelPlugin *plugin, Separator *sep);
-
-static void separator_construct (XfcePanelPlugin *plugin);
-
-static void separator_paint_dots (GtkWidget *widget, GdkRectangle * area, Separator *sep);
-
-static const unsigned char dark_bits[] = { 0x00, 0x0e, 0x02, 0x02, 0x00, 0x00, };
-static const unsigned char light_bits[] = { 0x00, 0x00, 0x10, 0x10, 0x1c, 0x00, };
-static const unsigned char mid_bits[] = { 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, };
-
-
-/* -------------------------------------------------------------------- *
- * Panel Plugin Interface *
- * -------------------------------------------------------------------- */
-
-/* Register with the panel */
-
-XFCE_PANEL_PLUGIN_REGISTER_INTERNAL (separator_construct);
-
-
-/* Interface Implementation */
-
-static gboolean
-separator_expose (GtkWidget *widget,
- GdkEventExpose *event,
- Separator *sep)
-{
- if (GTK_WIDGET_DRAWABLE (widget))
- {
- GtkAllocation *allocation;
- gboolean horizontal;
- int start, end, position;
- int x, y, w, h;
-
- allocation = &(widget->allocation);
- horizontal = (xfce_panel_plugin_get_orientation (sep->plugin)
- == GTK_ORIENTATION_HORIZONTAL);
-
- switch (sep->type)
- {
- case SEP_SPACE:
- case SEP_EXPAND:
- /* do nothing */
- break;
-
- case SEP_LINE:
- if (horizontal)
- {
- start = allocation->y + SEP_START * allocation->height;
- end = allocation->y + SEP_END * allocation->height;
- position = allocation->x + allocation->width / 2;
-
- gtk_paint_vline (widget->style,
- widget->window,
- GTK_WIDGET_STATE (widget),
- &(event->area),
- widget,
- "separator",
- start, end, position);
- }
- else
- {
- start = allocation->x + SEP_START * allocation->width;
- end = allocation->x + SEP_END * allocation->width;
- position = allocation->y + allocation->height / 2;
-
- gtk_paint_hline (widget->style,
- widget->window,
- GTK_WIDGET_STATE (widget),
- &(event->area),
- widget,
- "separator",
- start, end, position);
- }
- break;
-
- case SEP_HANDLE:
- x = allocation->x;
- y = allocation->y;
- w = allocation->width;
- h = allocation->height;
-
- gtk_paint_handle (widget->style,
- widget->window,
- GTK_WIDGET_STATE (widget),
- GTK_SHADOW_NONE,
- &(event->area),
- widget,
- "handlebox",
- x, y, w, h,
- horizontal ? GTK_ORIENTATION_VERTICAL :
- GTK_ORIENTATION_HORIZONTAL);
- break;
-
- case SEP_DOTS:
- separator_paint_dots (widget, &(event->area), sep);
- break;
-
- default:
- /* do nothing */
- break;
- }
-
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-separator_add_widget (Separator *sep)
-{
- GtkWidget *widget;
-
- widget = gtk_drawing_area_new ();
- gtk_widget_show (widget);
- gtk_container_add (GTK_CONTAINER (sep->plugin), widget);
-
- xfce_panel_plugin_add_action_widget (sep->plugin, widget);
-
- g_signal_connect_after (widget, "expose-event",
- G_CALLBACK (separator_expose), sep);
-}
-
-static void
-separator_orientation_changed (XfcePanelPlugin *plugin,
- GtkOrientation orientation,
- Separator *sep)
-{
- gtk_widget_queue_draw(GTK_WIDGET(plugin));
-}
-
-static gboolean
-separator_set_size (XfcePanelPlugin *plugin,
- int size,
- Separator *sep)
-{
- if (xfce_panel_plugin_get_orientation (plugin) ==
- GTK_ORIENTATION_HORIZONTAL)
- {
- gtk_widget_set_size_request (GTK_WIDGET (plugin),
- SEPARATOR_WIDTH, size);
- }
- else
- {
- gtk_widget_set_size_request (GTK_WIDGET (plugin),
- size, SEPARATOR_WIDTH);
- }
-
- return TRUE;
-}
-
-static void
-separator_read_rc_file (XfcePanelPlugin *plugin,
- Separator *sep)
-{
- char *file;
- XfceRc *rc;
- int type = SEP_LINE;
-
- if ((file = xfce_panel_plugin_lookup_rc_file (plugin)) != NULL)
- {
- rc = xfce_rc_simple_open (file, TRUE);
- g_free (file);
-
- if (rc != NULL)
- {
- type = xfce_rc_read_int_entry (rc, "separator-type", SEP_LINE);
-
- /* backward compatibility with xfce 4.4 */
- if (type == SEP_LINE && xfce_rc_has_entry (rc, "expand"))
- {
- if (xfce_rc_read_int_entry (rc, "expand", 0) == 1)
- {
- type = SEP_EXPAND;
- }
- else if (xfce_rc_read_int_entry (rc, "draw-separator", 1) == 0)
- {
- type = SEP_SPACE;
- }
- }
-
- xfce_rc_close (rc);
- }
- }
-
- sep->type = type;
-
- if (sep->type > SEP_EXPAND)
- separator_add_widget (sep);
- else if (sep->type == SEP_EXPAND)
- xfce_panel_plugin_set_expand (plugin, TRUE);
-}
-
-static void
-separator_write_rc_file (XfcePanelPlugin *plugin,
- Separator *sep)
-{
- 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, "separator-type", sep->type);
-
- xfce_rc_close (rc);
-}
-
-static void
-separator_free_data (XfcePanelPlugin *plugin,
- Separator *sep)
-{
- GtkWidget *dlg = g_object_get_data (G_OBJECT (plugin), "dialog");
-
- if (dlg)
- gtk_widget_destroy (dlg);
-
- panel_slice_free (Separator, sep);
-}
-
-/* create widgets and connect to signals */
-static void
-separator_construct (XfcePanelPlugin *plugin)
-{
- Separator *sep = panel_slice_new0 (Separator);
-
- sep->plugin = plugin;
- sep->type = SEP_LINE;
-
- g_signal_connect (plugin, "orientation-changed",
- G_CALLBACK (separator_orientation_changed), sep);
-
- g_signal_connect (plugin, "size-changed",
- G_CALLBACK (separator_set_size), sep);
-
- g_signal_connect (plugin, "save",
- G_CALLBACK (separator_write_rc_file), sep);
-
- g_signal_connect (plugin, "free-data",
- G_CALLBACK (separator_free_data), sep);
-
- xfce_panel_plugin_menu_show_configure (plugin);
- g_signal_connect (plugin, "configure-plugin",
- G_CALLBACK (separator_properties_dialog), sep);
-
- separator_read_rc_file (plugin, sep);
-}
-
-/* -------------------------------------------------------------------- *
- * Configuration Dialog *
- * -------------------------------------------------------------------- */
-
-static void
-change_style (GtkToggleButton *tb,
- Separator *sep,
- SeparatorType type)
-{
- if (gtk_toggle_button_get_active (tb))
- {
- gboolean add_widget = FALSE;
- gboolean expand = FALSE;
-
- sep->type = type;
-
- switch( type )
- {
- case SEP_SPACE:
- /* do nothing */
- break;
- case SEP_EXPAND:
- expand = TRUE;
- break;
- case SEP_LINE:
- case SEP_HANDLE:
- case SEP_DOTS:
- add_widget = TRUE;
- break;
- }
-
- if (add_widget && !GTK_BIN(sep->plugin)->child)
- {
- separator_add_widget (sep);
- }
- else if (!add_widget && GTK_BIN(sep->plugin)->child)
- {
- gtk_widget_destroy (GTK_BIN(sep->plugin)->child);
- }
-
- xfce_panel_plugin_set_expand (sep->plugin, expand);
- gtk_widget_queue_draw (GTK_WIDGET(sep->plugin));
- }
-}
-
-static void
-space_toggled (GtkToggleButton *tb,
- Separator *sep)
-{
- change_style (tb, sep, SEP_SPACE);
-}
-
-static void
-expand_toggled (GtkToggleButton *tb,
- Separator *sep)
-{
- change_style (tb, sep, SEP_EXPAND);
-}
-
-static void
-line_toggled (GtkToggleButton *tb,
- Separator *sep)
-{
- change_style (tb, sep, SEP_LINE);
-}
-
-static void
-handle_toggled (GtkToggleButton *tb,
- Separator *sep)
-{
- change_style (tb, sep, SEP_HANDLE);
-}
-
-static void
-dots_toggled (GtkToggleButton *tb,
- Separator *sep)
-{
- change_style (tb, sep, SEP_DOTS);
-}
-
-static void
-separator_dialog_response (GtkWidget *dlg,
- int reponse,
- Separator *sep)
-{
- g_object_set_data (G_OBJECT (sep->plugin), "dialog", NULL);
-
- gtk_widget_destroy (dlg);
- xfce_panel_plugin_unblock_menu (sep->plugin);
- separator_write_rc_file (sep->plugin, sep);
-}
-
-static void
-separator_properties_dialog (XfcePanelPlugin *plugin,
- Separator *sep)
-{
- GtkWidget *dlg, *vbox, *frame, *tb;
-
- xfce_panel_plugin_block_menu (plugin);
-
- dlg = xfce_titled_dialog_new_with_buttons (_("Separator or Spacing"), 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 (separator_dialog_response),
- sep);
-
- vbox = gtk_vbox_new (FALSE, 6);
- gtk_widget_show (vbox);
-
- frame = xfce_create_framebox_with_content(_("Separator Style"), vbox);
- gtk_container_set_border_width (GTK_CONTAINER (frame), 6);
- gtk_widget_show (frame);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame,
- TRUE, TRUE, 0);
-
- /* space */
- tb = gtk_radio_button_new_with_mnemonic (NULL,
- _("_Empty space"));
- gtk_widget_show (tb);
- gtk_box_pack_start (GTK_BOX (vbox), tb, FALSE, FALSE, 0);
- if (sep->type == SEP_SPACE)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tb), TRUE);
- g_signal_connect (tb, "toggled", G_CALLBACK (space_toggled), sep);
-
- /* expand */
- tb = gtk_radio_button_new_with_mnemonic_from_widget (
- GTK_RADIO_BUTTON(tb), _("E_xpanding empty space"));
- gtk_widget_show (tb);
- gtk_box_pack_start (GTK_BOX (vbox), tb, FALSE, FALSE, 0);
- if (sep->type == SEP_EXPAND)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tb), TRUE);
- g_signal_connect (tb, "toggled", G_CALLBACK (expand_toggled), sep);
-
- /* line */
- tb = gtk_radio_button_new_with_mnemonic_from_widget (
- GTK_RADIO_BUTTON(tb), _("_Line"));
- gtk_widget_show (tb);
- gtk_box_pack_start (GTK_BOX (vbox), tb, FALSE, FALSE, 0);
- if (sep->type == SEP_LINE)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tb), TRUE);
- g_signal_connect (tb, "toggled", G_CALLBACK (line_toggled), sep);
-
- /* handle */
- tb = gtk_radio_button_new_with_mnemonic_from_widget (
- GTK_RADIO_BUTTON(tb), _("_Handle"));
- gtk_widget_show (tb);
- gtk_box_pack_start (GTK_BOX (vbox), tb, FALSE, FALSE, 0);
- if (sep->type == SEP_HANDLE)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tb), TRUE);
- g_signal_connect (tb, "toggled", G_CALLBACK (handle_toggled), sep);
-
- /* dots */
- tb = gtk_radio_button_new_with_mnemonic_from_widget (
- GTK_RADIO_BUTTON(tb), _("_Dots"));
- gtk_widget_show (tb);
- gtk_box_pack_start (GTK_BOX (vbox), tb, FALSE, FALSE, 0);
- if (sep->type == SEP_DOTS)
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (tb), TRUE);
- g_signal_connect (tb, "toggled", G_CALLBACK (dots_toggled), sep);
-
- gtk_widget_show (dlg);
-}
-
-static void
-separator_paint_dots (GtkWidget *widget, GdkRectangle * area, Separator *sep)
-{
- GdkBitmap *dark_bmap, *mid_bmap, *light_bmap;
- gint x, y, w, h, rows, cols;
- gint width, height;
-
- width = widget->allocation.width;
- height = widget->allocation.height;
-
- dark_bmap = gdk_bitmap_create_from_data (widget->window,
- (const gchar*) dark_bits,
- 6, 6);
- mid_bmap = gdk_bitmap_create_from_data (widget->window,
- (const gchar*) mid_bits,
- 6, 6);
- light_bmap = gdk_bitmap_create_from_data (widget->window,
- (const gchar*) light_bits,
- 6, 6);
- if (area)
- {
- gdk_gc_set_clip_rectangle (widget->style->light_gc[widget->state],
- area);
- gdk_gc_set_clip_rectangle (widget->style->dark_gc[widget->state],
- area);
- gdk_gc_set_clip_rectangle (widget->style->mid_gc[widget->state],
- area);
- }
-
- if (xfce_panel_plugin_get_orientation (sep->plugin) == GTK_ORIENTATION_HORIZONTAL)
- {
- rows = MAX (height / 6, 1);
- w = 6;
- h = rows * 6;
- }
- else
- {
- cols = MAX (width / 6, 1);
- h = 6;
- w = cols * 6;
- }
-
- x = (width - w) / 2;
- y = (height - h) / 2;
-
-
- gdk_gc_set_stipple (widget->style->light_gc[widget->state],
- light_bmap);
- gdk_gc_set_stipple (widget->style->mid_gc[widget->state],
- mid_bmap);
- gdk_gc_set_stipple (widget->style->dark_gc[widget->state],
- dark_bmap);
-
- gdk_gc_set_fill (widget->style->light_gc[widget->state], GDK_STIPPLED);
- gdk_gc_set_fill (widget->style->mid_gc[widget->state], GDK_STIPPLED);
- gdk_gc_set_fill (widget->style->dark_gc[widget->state], GDK_STIPPLED);
-
- gdk_gc_set_ts_origin (widget->style->light_gc[widget->state], x, y);
- gdk_gc_set_ts_origin (widget->style->mid_gc[widget->state], x, y);
- gdk_gc_set_ts_origin (widget->style->dark_gc[widget->state], x, y);
-
- gdk_draw_rectangle (widget->window,
- widget->style->light_gc[widget->state],
- TRUE,
- x, y, w, h);
- gdk_draw_rectangle (widget->window,
- widget->style->mid_gc[widget->state],
- TRUE,
- x, y, w, h);
- gdk_draw_rectangle (widget->window,
- widget->style->dark_gc[widget->state],
- TRUE,
- x, y, w, h);
-
- gdk_gc_set_fill (widget->style->light_gc[widget->state], GDK_SOLID);
- gdk_gc_set_fill (widget->style->mid_gc[widget->state], GDK_SOLID);
- gdk_gc_set_fill (widget->style->dark_gc[widget->state], GDK_SOLID);
-
- if (area)
- {
- gdk_gc_set_clip_rectangle (widget->style->light_gc[widget->state],
- NULL);
- gdk_gc_set_clip_rectangle (widget->style->dark_gc[widget->state],
- NULL);
- gdk_gc_set_clip_rectangle (widget->style->mid_gc[widget->state],
- NULL);
- }
-
- g_object_unref (dark_bmap);
- g_object_unref (mid_bmap);
- g_object_unref (light_bmap);
-}
-
-