diff options
Diffstat (limited to 'libxfce4panel/xfce-panel-window.c')
-rw-r--r-- | libxfce4panel/xfce-panel-window.c | 1284 |
1 files changed, 0 insertions, 1284 deletions
diff --git a/libxfce4panel/xfce-panel-window.c b/libxfce4panel/xfce-panel-window.c deleted file mode 100644 index 6a6ecd81..00000000 --- a/libxfce4panel/xfce-panel-window.c +++ /dev/null @@ -1,1284 +0,0 @@ -/* $Id$ - * - * Copyright (c) 2004-2007 Jasper Huijsmans <jasper@xfce.org> - * - * This library 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 library 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 library; 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 <stdio.h> -#include <string.h> - -#include <gtk/gtk.h> - -#include <libxfce4panel/xfce-panel-macros.h> -#include <libxfce4panel/libxfce4panel-marshal.h> -#include <libxfce4panel/libxfce4panel-enum-types.h> -#include <libxfce4panel/xfce-panel-window.h> -#include <libxfce4panel/libxfce4panel-alias.h> - -#define XFCE_PANEL_WINDOW_GET_PRIVATE(o) \ - (G_TYPE_INSTANCE_GET_PRIVATE ((o), XFCE_TYPE_PANEL_WINDOW, \ - XfcePanelWindowPrivate)) - -#define DEFAULT_ORIENTATION GTK_ORIENTATION_HORIZONTAL -#define DEFAULT_HANDLE_STYLE XFCE_HANDLE_STYLE_BOTH -#define HANDLE_WIDTH 8 - -enum -{ - ORIENTATION_CHANGED, - MOVE_START, - MOVE, - MOVE_END, - LAST_SIGNAL -}; - -enum -{ - PROP_0, - PROP_ORIENTATION, - PROP_HANDLE_STYLE -}; - - -typedef struct _XfcePanelWindowPrivate XfcePanelWindowPrivate; - -struct _XfcePanelWindowPrivate -{ - GtkOrientation orientation; - XfceHandleStyle handle_style; - - GtkAllocation allocation; - - gint x_offset; - gint y_offset; - gint x_root; - gint y_root; - - XfcePanelWindowMoveFunc move_func; - gpointer move_data; - - XfcePanelWindowResizeFunc resize_func; - gpointer resize_data; - - guint shown : 1; - guint in_move : 1; - guint top_border : 1; - guint bottom_border : 1; - guint left_border : 1; - guint right_border : 1; - guint movable : 1; -}; - - - - -static void xfce_panel_window_class_init (XfcePanelWindowClass *klass); -static void xfce_panel_window_init (XfcePanelWindow *window); -static void xfce_panel_window_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec); -static void xfce_panel_window_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec); -static void xfce_panel_window_realize (GtkWidget *widget); -static void xfce_panel_window_unrealize (GtkWidget *widget); -static void xfce_panel_window_map (GtkWidget *widget); -static void xfce_panel_window_unmap (GtkWidget *widget); -static void xfce_panel_window_show (GtkWidget *widget); -static void xfce_panel_window_hide (GtkWidget *widget); -static gint xfce_panel_window_expose (GtkWidget *widget, - GdkEventExpose *event); -static void xfce_panel_window_size_request (GtkWidget *widget, - GtkRequisition *requisition); -static void xfce_panel_window_size_allocate (GtkWidget *widget, - GtkAllocation *allocation); -static gboolean xfce_panel_window_button_press (GtkWidget *widget, - GdkEventButton *event); -static gboolean xfce_panel_window_button_release (GtkWidget *widget, - GdkEventButton *event); -static gboolean xfce_panel_window_motion_notify (GtkWidget *widget, - GdkEventMotion *event); -static void _paint_handle (XfcePanelWindow *panel_window, - gboolean start, - GdkRectangle *area); - - - -/* global vars */ -static GtkWindowClass *parent_class = NULL; -static guint panel_window_signals[LAST_SIGNAL] = { 0 }; - - - -/* public GType function */ -GType -xfce_panel_window_get_type (void) -{ - static GtkType type = G_TYPE_INVALID; - - if (G_UNLIKELY (type == G_TYPE_INVALID)) - { - type = _panel_g_type_register_simple (GTK_TYPE_WINDOW, - "XfcePanelWindow", - sizeof (XfcePanelWindowClass), - xfce_panel_window_class_init, - sizeof (XfcePanelWindow), - xfce_panel_window_init); - } - - return type; -} - - - -/* init */ -static void -xfce_panel_window_class_init (XfcePanelWindowClass *klass) -{ - GObjectClass *gobject_class; - GtkWidgetClass *widget_class; - - g_type_class_add_private (klass, sizeof (XfcePanelWindowPrivate)); - - parent_class = g_type_class_peek_parent (klass); - - gobject_class = G_OBJECT_CLASS (klass); - gobject_class->get_property = xfce_panel_window_get_property; - gobject_class->set_property = xfce_panel_window_set_property; - - widget_class = GTK_WIDGET_CLASS (klass); - widget_class->realize = xfce_panel_window_realize; - widget_class->unrealize = xfce_panel_window_unrealize; - widget_class->map = xfce_panel_window_map; - widget_class->unmap = xfce_panel_window_unmap; - widget_class->show = xfce_panel_window_show; - widget_class->hide = xfce_panel_window_hide; - widget_class->expose_event = xfce_panel_window_expose; - widget_class->size_request = xfce_panel_window_size_request; - widget_class->size_allocate = xfce_panel_window_size_allocate; - widget_class->button_press_event = xfce_panel_window_button_press; - widget_class->button_release_event = xfce_panel_window_button_release; - widget_class->motion_notify_event = xfce_panel_window_motion_notify; - - /* signals */ - - /** - * XfcePanelWindow::orientation-changed: - * @window: the object which emitted the signal - * @orientation: the new #GtkOrientation of the window - * - * Emitted when the orientation of the #XfcePanelWindow changes. - **/ - panel_window_signals[ORIENTATION_CHANGED] = - g_signal_new (I_("orientation-changed"), - G_OBJECT_CLASS_TYPE (klass), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (XfcePanelWindowClass, - orientation_changed), - NULL, NULL, - g_cclosure_marshal_VOID__ENUM, - G_TYPE_NONE, - 1, - GTK_TYPE_ORIENTATION); - - /** - * XfcePanelWindow::move-start - * @window: the #XfcePanelWindow which emitted the signal - * - * Emitted when the user starts to drag the #XfcePanelWindow. - **/ - panel_window_signals[MOVE_START] = - g_signal_new (I_("move-start"), - G_OBJECT_CLASS_TYPE (widget_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (XfcePanelWindowClass, - move_start), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - /** - * XfcePanelWindow::move - * @window: the #XfcePanelWindow which emitted the signal - * @x: x coordinate of the new position - * @y: y coordinate of the new position - * - * Emitted when the user moves the #XfcePanelWindow to a new position with - * coordinates (@x, @y). - **/ - panel_window_signals[MOVE] = - g_signal_new (I_("move"), - G_OBJECT_CLASS_TYPE (widget_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (XfcePanelWindowClass, - move), - NULL, NULL, - _libxfce4panel_marshal_VOID__INT_INT, - G_TYPE_NONE, - 2, - G_TYPE_INT, - G_TYPE_INT); - - /** - * XfcePanelWindow::move-end - * @window: the #XfcePanelWindow which emitted the signal - * @x: x coordinate of the new positions - * @y: y coordinate of the new position - * - * Emitted when the user stops dragging the #XfcePanelWindow. The latest - * position has coordinates (@x, @y). - **/ - panel_window_signals[MOVE_END] = - g_signal_new (I_("move-end"), - G_OBJECT_CLASS_TYPE (widget_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (XfcePanelWindowClass, - move_end), - NULL, NULL, - _libxfce4panel_marshal_VOID__INT_INT, - G_TYPE_NONE, - 2, - G_TYPE_INT, - G_TYPE_INT); - - /* properties */ - - /** - * XfcePanelWindow:orientation - * - * The orientation of the window. This the determines the way the handles - * are drawn. - **/ - g_object_class_install_property (gobject_class, - PROP_ORIENTATION, - g_param_spec_enum ("orientation", - "Orientation", - "The orientation of the itembar", - GTK_TYPE_ORIENTATION, - GTK_ORIENTATION_HORIZONTAL, - PANEL_PARAM_READWRITE)); - - - /** - * XfcePanelWindow:handle-style - * - * The #XfceHandleStyle to use when drawing handles. - **/ - g_object_class_install_property (gobject_class, - PROP_HANDLE_STYLE, - g_param_spec_enum ("handle-style", - "Handle style", - "Type of handles to draw", - XFCE_TYPE_HANDLE_STYLE, - DEFAULT_HANDLE_STYLE, - PANEL_PARAM_READWRITE)); -} - - - -static void -xfce_panel_window_init (XfcePanelWindow *panel_window) -{ - XfcePanelWindowPrivate *priv; - - GTK_WIDGET_SET_FLAGS (GTK_WIDGET (panel_window), GTK_CAN_FOCUS); - - gtk_window_set_type_hint (GTK_WINDOW (panel_window), GDK_WINDOW_TYPE_HINT_DOCK); - gtk_window_set_decorated (GTK_WINDOW (panel_window), FALSE); - gtk_window_set_resizable (GTK_WINDOW (panel_window), FALSE); - gtk_window_set_title (GTK_WINDOW (panel_window), PACKAGE_NAME); - gtk_window_stick (GTK_WINDOW (panel_window)); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel_window); - - priv->handle_style = DEFAULT_HANDLE_STYLE; - priv->orientation = DEFAULT_ORIENTATION; - priv->shown = FALSE; - priv->allocation.x = 0; - priv->allocation.x = 0; - priv->allocation.width = 0; - priv->allocation.height = 0; - priv->in_move = FALSE; - priv->x_offset = 0; - priv->y_offset = 0; - priv->x_root = 0; - priv->y_root = 0; - priv->move_func = NULL; - priv->move_data = NULL; - priv->resize_func = NULL; - priv->resize_data = NULL; - priv->top_border = TRUE; - priv->bottom_border = TRUE; - priv->left_border = TRUE; - priv->right_border = TRUE; - priv->movable = TRUE; - - gtk_widget_set_events (GTK_WIDGET (panel_window), - gtk_widget_get_events (GTK_WIDGET (panel_window)) - | GDK_BUTTON_MOTION_MASK - | GDK_BUTTON_PRESS_MASK - | GDK_BUTTON_RELEASE_MASK - | GDK_EXPOSURE_MASK - | GDK_ENTER_NOTIFY_MASK - | GDK_LEAVE_NOTIFY_MASK); -} - - - -/* GObject */ -static void -xfce_panel_window_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (object); - - switch (prop_id) - { - case PROP_ORIENTATION: - g_value_set_enum (value, priv->orientation); - break; - case PROP_HANDLE_STYLE: - g_value_set_enum (value, priv->handle_style); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - - - -static void -xfce_panel_window_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - XfcePanelWindow *window = XFCE_PANEL_WINDOW (object); - - switch (prop_id) - { - case PROP_ORIENTATION: - xfce_panel_window_set_orientation (window, g_value_get_enum (value)); - break; - case PROP_HANDLE_STYLE: - xfce_panel_window_set_handle_style (window, g_value_get_enum (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; - } -} - - - -/* GtkWidget */ -static void -xfce_panel_window_realize (GtkWidget *widget) -{ - gtk_window_stick (GTK_WINDOW (widget)); - - GTK_WIDGET_CLASS (parent_class)->realize (widget); -} - - - -static void -xfce_panel_window_unrealize (GtkWidget *widget) -{ - GTK_WIDGET_CLASS (parent_class)->unrealize (widget); -} - - - -static void -xfce_panel_window_map (GtkWidget *widget) -{ - GTK_WIDGET_CLASS (parent_class)->map (widget); -} - - - -static void -xfce_panel_window_unmap (GtkWidget *widget) -{ - GTK_WIDGET_CLASS (parent_class)->unmap (widget); -} - - - -static void -xfce_panel_window_show (GtkWidget *widget) -{ - XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (widget); - - GTK_WIDGET_CLASS (parent_class)->show (widget); - - if (!priv->shown) - { - gdk_window_get_root_origin (widget->window, - &(priv->x_root), &(priv->y_root)); - - priv->shown = TRUE; - } -} - - - -static void -xfce_panel_window_hide (GtkWidget *widget) -{ - XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (widget); - - GTK_WIDGET_CLASS (parent_class)->hide (widget); - - priv->shown = FALSE; -} - - - -/* drawing, size and style */ -static void -_panel_window_paint_border (XfcePanelWindow *panel) -{ - XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel); - GdkWindow *window = GTK_WIDGET (panel)->window; - GtkAllocation *a = &(GTK_WIDGET (panel)->allocation); - GtkStyle *style = GTK_WIDGET (panel)->style; - GtkStateType state_type = GTK_WIDGET_STATE (GTK_WIDGET (panel)); - gint top, bottom, left, right; - gint x1, x2, y1, y2; - - top = priv->top_border ? style->ythickness : 0; - bottom = priv->bottom_border ? style->ythickness : 0; - left = priv->left_border ? style->xthickness : 0; - right = priv->right_border ? style->xthickness : 0; - - /* Code based on gtk-xfce-engine-2 */ - - /* Attempt to explain the code below with some ASCII 'art' - * - * joining lines: - = horizontal, + = vertical - * - * single double - * ----------+ ----------+ - * + + +--------++ - * + + ++ ++ - * + + ++ ++ - * + + ++--------+ - * +---------- +---------- - * - */ - - if (top > 0) - { - x1 = a->x; - y1 = a->y; - x2 = x1 + a->width - 1; - - if (right > 0) - x2--; - - if (top > 1) - { - gdk_draw_line (window, style->dark_gc[state_type], x1, y1, x2, y1); - - if (left > 0) - x1++; - - if (right > 1) - x2--; - - y1++; - - gdk_draw_line (window, style->light_gc[state_type], x1, y1, x2, y1); - } - else - { - gdk_draw_line (window, style->light_gc[state_type], x1, y1, x2, y1); - } - } - - if (bottom > 0) - { - x1 = a->x; - y1 = a->y + a->height - 1; - x2 = x1 + a->width - 1; - - if (left > 0) - x1++; - - if (bottom > 1) - { - gdk_draw_line (window, style->dark_gc[state_type], x1, y1, x2, y1); - - if (left > 1) - x1++; - - if (right > 0) - x2--; - - y1--; - - gdk_draw_line (window, style->mid_gc[state_type], x1, y1, x2, y1); - } - else - { - gdk_draw_line (window, style->dark_gc[state_type], x1, y1, x2, y1); - } - } - - if (left > 0) - { - x1 = a->x; - y1 = a->y; - y2 = a->y + a->height - 1; - - if (top > 0) - y1++; - - if (left > 1) - { - gdk_draw_line (window, style->dark_gc[state_type], x1, y1, x1, y2); - - if (top > 1) - y1++; - - if (bottom > 0) - y2--; - - x1++; - - gdk_draw_line (window, style->light_gc[state_type], x1, y1, x1, y2); - } - else - { - gdk_draw_line (window, style->light_gc[state_type], x1, y1, x1, y2); - } - } - - if (right > 0) - { - x1 = a->x + a->width - 1; - y1 = a->y; - y2 = a->y + a->height - 1; - - if (bottom > 0) - y2--; - - if (right > 1) - { - gdk_draw_line (window, style->dark_gc[state_type], x1, y1, x1, y2); - - if (top > 0) - y1++; - - if (bottom > 1) - y2--; - - x1--; - - gdk_draw_line (window, style->mid_gc[state_type], x1, y1, x1, y2); - } - else - { - gdk_draw_line (window, style->dark_gc[state_type], x1, y1, x1, y2); - } - } -} - - - -static gint -xfce_panel_window_expose (GtkWidget *widget, - GdkEventExpose *event) -{ - XfcePanelWindow *panel_window = XFCE_PANEL_WINDOW (widget); - XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel_window); - - if (GTK_WIDGET_DRAWABLE (widget)) - { - if (GTK_BIN (widget)->child) - { - gtk_container_propagate_expose (GTK_CONTAINER (widget), - GTK_BIN (widget)->child, event); - } - - switch (priv->handle_style) - { - case XFCE_HANDLE_STYLE_BOTH: - _paint_handle (panel_window, TRUE, &event->area); - _paint_handle (panel_window, FALSE, &event->area); - break; - case XFCE_HANDLE_STYLE_START: - _paint_handle (panel_window, TRUE, &event->area); - break; - case XFCE_HANDLE_STYLE_END: - _paint_handle (panel_window, FALSE, &event->area); - break; - default: - break; - } - - _panel_window_paint_border (panel_window); - } - - return FALSE; -} - - - -static void -xfce_panel_window_size_request (GtkWidget *widget, - GtkRequisition *requisition) -{ - XfcePanelWindow *panel_window = XFCE_PANEL_WINDOW (widget); - XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel_window); - gint handle_size, thick; - - requisition->width = requisition->height = 0; - - if (GTK_BIN (widget)->child) - { - gtk_widget_size_request (GTK_BIN (widget)->child, requisition); - } - - if (priv->top_border) - requisition->height += widget->style->ythickness; - if (priv->bottom_border) - requisition->height += widget->style->ythickness; - if (priv->left_border) - requisition->width += widget->style->xthickness; - if (priv->right_border) - requisition->width += widget->style->xthickness; - - if (GTK_ORIENTATION_HORIZONTAL == priv->orientation) - thick = 2 * widget->style->xthickness; - else - thick = 2 * widget->style->ythickness; - - switch (priv->handle_style) - { - case XFCE_HANDLE_STYLE_BOTH: - handle_size = 2 * (HANDLE_WIDTH + thick); - break; - - case XFCE_HANDLE_STYLE_START: - case XFCE_HANDLE_STYLE_END: - handle_size = HANDLE_WIDTH + thick; - break; - - default: - handle_size = 0; - } - - if (GTK_ORIENTATION_HORIZONTAL == priv->orientation) - requisition->width += handle_size; - else - requisition->height += handle_size; -} - - - -static void -xfce_panel_window_size_allocate (GtkWidget *widget, - GtkAllocation *allocation) -{ - XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (widget); - GtkAllocation old, new, childalloc; - gint start_handle_size, end_handle_size, thick; - - widget->allocation = *allocation; - - if (GTK_WIDGET_REALIZED (widget)) - { - gdk_window_resize (widget->window, - allocation->width, allocation->height); - - if (priv->shown) - { - gdk_window_get_root_origin (widget->window, - &(priv->x_root), &(priv->y_root)); - - if (priv->resize_func && priv->shown) - { - old = priv->allocation; - new = *allocation; - - priv->resize_func (widget, priv->resize_data, - &old, &new, - &(priv->x_root), &(priv->y_root)); - - gtk_widget_queue_draw (widget); - } - - gdk_window_move (widget->window, priv->x_root, priv->y_root); - } - } - - if (GTK_BIN (widget)->child) - { - if (GTK_ORIENTATION_HORIZONTAL == priv->orientation) - thick = 2 * widget->style->xthickness; - else - thick = 2 * widget->style->ythickness; - - start_handle_size = end_handle_size = 0; - - switch (priv->handle_style) - { - case XFCE_HANDLE_STYLE_BOTH: - start_handle_size = end_handle_size = HANDLE_WIDTH + thick; - break; - case XFCE_HANDLE_STYLE_START: - start_handle_size = HANDLE_WIDTH + thick; - break; - case XFCE_HANDLE_STYLE_END: - end_handle_size = HANDLE_WIDTH + thick; - break; - default: - break; - } - - childalloc = *allocation; - - if (priv->top_border) - { - childalloc.y += widget->style->ythickness; - childalloc.height -= widget->style->ythickness; - } - - if (priv->bottom_border) - childalloc.height -= widget->style->ythickness; - - if (priv->left_border) - { - childalloc.x += widget->style->xthickness; - childalloc.width -= widget->style->xthickness; - } - - if (priv->right_border) - childalloc.width -= widget->style->xthickness; - - if (priv->orientation == GTK_ORIENTATION_HORIZONTAL) - { - childalloc.x += start_handle_size; - childalloc.width -= start_handle_size + end_handle_size; - } - else - { - childalloc.y += start_handle_size; - childalloc.height -= start_handle_size + end_handle_size; - } - - gtk_widget_size_allocate (GTK_BIN (widget)->child, &childalloc); - } - - priv->allocation = *allocation; -} - - - -/* keyboard and mouse events */ -static gboolean -xfce_panel_window_button_press (GtkWidget *widget, - GdkEventButton *event) -{ - XfcePanelWindow *panel_window; - XfcePanelWindowPrivate *priv; - GdkCursor *fleur; - - _panel_return_val_if_fail (XFCE_IS_PANEL_WINDOW (widget), FALSE); - - panel_window = XFCE_PANEL_WINDOW (widget); - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel_window); - - if (priv->movable && - event->button == 1 && (event->window == widget->window)) - { - gdk_window_get_root_origin (widget->window, - &(priv->x_root), &(priv->y_root)); - - priv->in_move = TRUE; - - priv->x_offset = priv->x_root - event->x_root; - priv->y_offset = priv->y_root - event->y_root; - - fleur = gdk_cursor_new (GDK_FLEUR); - if (gdk_pointer_grab (widget->window, FALSE, - GDK_BUTTON1_MOTION_MASK | - GDK_POINTER_MOTION_HINT_MASK | - GDK_BUTTON_RELEASE_MASK, - NULL, fleur, event->time) != 0) - { - priv->in_move = FALSE; - } - gdk_cursor_unref (fleur); - - g_signal_emit (G_OBJECT (widget), panel_window_signals[MOVE_START], 0); - return TRUE; - } - - return FALSE; -} - - - -static gboolean -xfce_panel_window_button_release (GtkWidget *widget, - GdkEventButton *event) -{ - XfcePanelWindow *panel_window; - XfcePanelWindowPrivate *priv; - - _panel_return_val_if_fail (XFCE_IS_PANEL_WINDOW (widget), FALSE); - - panel_window = XFCE_PANEL_WINDOW (widget); - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel_window); - - if (!priv->in_move) - return FALSE; - - gdk_pointer_ungrab (event->time); - priv->in_move = FALSE; - gdk_window_get_origin (widget->window, &(priv->x_root), &(priv->y_root)); - - g_signal_emit (G_OBJECT (widget), panel_window_signals[MOVE_END], 0, - priv->x_root, priv->y_root); - - return TRUE; -} - - - -static gboolean -xfce_panel_window_motion_notify (GtkWidget *widget, - GdkEventMotion *event) -{ - XfcePanelWindow *panel_window; - XfcePanelWindowPrivate *priv; - gint new_x, new_y; - - _panel_return_val_if_fail (XFCE_IS_PANEL_WINDOW (widget), FALSE); - - panel_window = XFCE_PANEL_WINDOW (widget); - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel_window); - - if (!priv->in_move) - return FALSE; - - gdk_window_get_pointer (NULL, &new_x, &new_y, NULL); - new_x += priv->x_offset; - new_y += priv->y_offset; - - if (priv->move_func) - priv->move_func (widget, priv->move_data, &new_x, &new_y); - - priv->x_root = new_x; - priv->y_root = new_y; - - gdk_window_move (widget->window, new_x, new_y); - - g_signal_emit (G_OBJECT (widget), panel_window_signals[MOVE], 0, new_x, new_y); - - return TRUE; -} - - - -/* ginternal functions */ -static void -_paint_handle (XfcePanelWindow *panel_window, - gboolean start, - GdkRectangle *area) -{ - XfcePanelWindowPrivate *priv = XFCE_PANEL_WINDOW_GET_PRIVATE (panel_window); - GtkWidget *widget = GTK_WIDGET (panel_window); - GtkAllocation *alloc = &(widget->allocation); - gint x, y, w, h, xthick, ythick; - gboolean horizontal = priv->orientation == GTK_ORIENTATION_HORIZONTAL; - - xthick = widget->style->xthickness; - ythick = widget->style->ythickness; - - if (horizontal) - { - w = HANDLE_WIDTH; - h = alloc->height - 2 * ythick; - - y = alloc->y + ythick; - - if (priv->top_border) - { - h -= ythick; - y += ythick; - } - if (priv->bottom_border) - h -= ythick; - - if (start) - { - x = alloc->x + xthick; - - if (priv->left_border) - x += xthick; - } - else - { - x = alloc->x + alloc->width - HANDLE_WIDTH - xthick; - - if (priv->right_border) - x -= xthick; - } - } - else - { - w = alloc->width - 2 * xthick; - h = HANDLE_WIDTH; - - x = alloc->x + xthick; - - if (priv->left_border) - { - w -= xthick; - x += xthick; - } - if (priv->right_border) - w -= xthick; - - if (start) - { - y = alloc->y + ythick; - - if (priv->top_border) - y += ythick; - } - else - { - y = alloc->y + alloc->height - HANDLE_WIDTH - ythick; - - if (priv->bottom_border) - y -= ythick; - } - } - - gtk_paint_handle (widget->style, widget->window, - GTK_WIDGET_STATE (widget), GTK_SHADOW_NONE, - area, widget, "handlebox", - x, y, w, h, - horizontal ? GTK_ORIENTATION_VERTICAL : - GTK_ORIENTATION_HORIZONTAL); -} - - - -/** - * xfce_panel_window_new - * - * Create new panel window. - * - * Returns: New #GtkWidget - **/ -GtkWidget * -xfce_panel_window_new (void) -{ - return g_object_new (XFCE_TYPE_PANEL_WINDOW, NULL); -} - - - -/** - * xfce_panel_window_get_orientation - * @window: #XfcePanelWindow - * - * Get orientation of panel window. - * - * Returns: #GtkOrientation of @window - **/ -GtkOrientation -xfce_panel_window_get_orientation (XfcePanelWindow *window) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_val_if_fail (XFCE_IS_PANEL_WINDOW (window), DEFAULT_ORIENTATION); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - return priv->orientation; -} - - - -/** - * xfce_panel_window_set_orientation - * @window : #XfcePanelWindow - * @orientation: new #GtkOrientation - * - * Set orientation for panel window. - **/ -void -xfce_panel_window_set_orientation (XfcePanelWindow *window, - GtkOrientation orientation) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_if_fail (XFCE_IS_PANEL_WINDOW (window)); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - priv->orientation = orientation; - - g_signal_emit (G_OBJECT (window), - panel_window_signals[ORIENTATION_CHANGED], 0, orientation); - - g_object_notify (G_OBJECT (window), "orientation"); -} - - - -/** - * xfce_panel_window_get_handle_style - * @window: #XfcePanelWindow - * - * Get handle style of panel window. - * - * Returns: #XfceHandleStyle of @window - **/ -XfceHandleStyle -xfce_panel_window_get_handle_style (XfcePanelWindow *window) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_val_if_fail (XFCE_IS_PANEL_WINDOW (window), DEFAULT_HANDLE_STYLE); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - return priv->handle_style; -} - - - -/** - * xfce_panel_window_set_handle_style - * @window : #XfcePanelWindow - * @handle_style: new #XfceHandleStyle - * - * Set handle style for panel window. - **/ -void -xfce_panel_window_set_handle_style (XfcePanelWindow *window, - XfceHandleStyle handle_style) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_if_fail (XFCE_IS_PANEL_WINDOW (window)); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - if (handle_style == priv->handle_style) - return; - - priv->handle_style = handle_style; - - g_object_notify (G_OBJECT (window), "handle_style"); - - gtk_widget_queue_resize (GTK_WIDGET (window)); -} - - - -/** - * xfce_panel_window_get_show_border - * @window : #XfcePanelWindow - * @top_border : location for top border or %NULL - * @bottom_border: location for bottom border or %NULL - * @left_border : location for left border or %NULL - * @right_border : location for right border or %NULL - * - * Get visibility of panel window borders. - **/ -void -xfce_panel_window_get_show_border (XfcePanelWindow *window, - gboolean *top_border, - gboolean *bottom_border, - gboolean *left_border, - gboolean *right_border) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_if_fail (XFCE_IS_PANEL_WINDOW (window)); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - if (top_border != NULL) - *top_border = priv->top_border; - if (bottom_border != NULL) - *bottom_border = priv->bottom_border; - if (left_border != NULL) - *left_border = priv->left_border; - if (right_border != NULL) - *right_border = priv->right_border; -} - - - -/** - * xfce_panel_window_set_show_border - * @window : #XfcePanelWindow - * @top_border : show top border - * @bottom_border: show bottom border - * @left_border : show left border - * @right_border : show right border - * - * Set border visibility for the panel window. - **/ -void -xfce_panel_window_set_show_border (XfcePanelWindow *window, - gboolean top_border, - gboolean bottom_border, - gboolean left_border, - gboolean right_border) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_if_fail (XFCE_IS_PANEL_WINDOW (window)); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - if (top_border != priv->top_border - || bottom_border != priv->bottom_border - || left_border != priv->left_border - || right_border != priv->right_border) - { - priv->top_border = top_border; - priv->bottom_border = bottom_border; - priv->left_border = left_border; - priv->right_border = right_border; - - gtk_widget_queue_resize (GTK_WIDGET (window)); - } -} - - - -/** - * xfce_panel_window_set_move_function - * @window : #XfcePanelWindow - * @function: #XfcePanelWindowMoveFunc - * @data : user data - * - * Set a function to modify move behaviour of the panel window. - **/ -void -xfce_panel_window_set_move_function (XfcePanelWindow *window, - XfcePanelWindowMoveFunc function, - gpointer data) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_if_fail (XFCE_IS_PANEL_WINDOW (window)); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - priv->move_func = function; - priv->move_data = data; -} - - - -/** - * xfce_panel_window_set_resize_function - * @window : #XfcePanelWindow - * @function: #XfcePanelWindowResizeFunc - * @data : user data - * - * Set a function to modify resize behaviour of the panel window. - **/ -void -xfce_panel_window_set_resize_function (XfcePanelWindow *window, - XfcePanelWindowResizeFunc function, - gpointer data) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_if_fail (XFCE_IS_PANEL_WINDOW (window)); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - priv->resize_func = function; - priv->resize_data = data; -} - - - -/** - * xfce_panel_window_get_movable - * @window : #XfcePanelWindow - * - * Check if the panel window can be moved by the user. - * By default this is %TRUE. - * - * Returns: %TRUE if the user is allowed to move @window, %FALSE if not. - **/ -gboolean -xfce_panel_window_get_movable (XfcePanelWindow *window) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_val_if_fail (XFCE_IS_PANEL_WINDOW (window), TRUE); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - return priv->movable; -} - - - -/** - * xfce_panel_window_set_movable - * @window : #XfcePanelWindow - * @movable: %TRUE or %FALSE. - * - * Set if the panel window can be moved by the user. - **/ -void -xfce_panel_window_set_movable (XfcePanelWindow *window, - gboolean movable) -{ - XfcePanelWindowPrivate *priv; - - _panel_return_if_fail (XFCE_IS_PANEL_WINDOW (window)); - - priv = XFCE_PANEL_WINDOW_GET_PRIVATE (window); - - priv->movable = movable; -} - - - -#define __XFCE_PANEL_WINDOW_C__ -#include <libxfce4panel/libxfce4panel-aliasdef.c> - |