From c51ef797a707f4e2c6f9688d4378f2b0e9898a66 Mon Sep 17 00:00:00 2001 From: Perberos Date: Thu, 1 Dec 2011 22:56:10 -0300 Subject: moving from https://github.com/perberos/mate-desktop-environment --- mate-panel/panel-widget.h | 242 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 242 insertions(+) create mode 100644 mate-panel/panel-widget.h (limited to 'mate-panel/panel-widget.h') diff --git a/mate-panel/panel-widget.h b/mate-panel/panel-widget.h new file mode 100644 index 00000000..c844b217 --- /dev/null +++ b/mate-panel/panel-widget.h @@ -0,0 +1,242 @@ +/* Mate panel: panel widget + * (C) 1997-1998 the Free Software Foundation + * + * Authors: George Lebl + */ +/* This widget, although slightly written as a general purpose widget, it + has MANY interdependencies, which makes it almost impossible to use in + anything else but the panel, what it would need is some serious + cleaning up*/ +#ifndef PANEL_WIDGET_H +#define PANEL_WIDGET_H + + +#include +#include +#include "button-widget.h" +#include "panel-types.h" +#include "panel-background.h" +#include "panel-toplevel.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define PANEL_TYPE_WIDGET \ + (panel_widget_get_type()) +#define PANEL_WIDGET(object) \ + (G_TYPE_CHECK_INSTANCE_CAST((object), PANEL_TYPE_WIDGET, PanelWidget)) +#define PANEL_WIDGET_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), PANEL_TYPE_WIDGET, PanelWidgetClass)) +#define PANEL_IS_WIDGET(object) \ + (G_TYPE_CHECK_INSTANCE_TYPE((object), PANEL_TYPE_WIDGET)) + +#define PANEL_MINIMUM_WIDTH 12 + +#define MATE_PANEL_APPLET_ASSOC_PANEL_KEY "mate_panel_applet_assoc_panel_key" +#define MATE_PANEL_APPLET_FORBIDDEN_PANELS "mate_panel_applet_forbidden_panels" +#define MATE_PANEL_APPLET_DATA "mate_panel_applet_data" + +#ifndef TYPEDEF_PANEL_WIDGET +typedef struct _PanelWidget PanelWidget; +#define TYPEDEF_PANEL_WIDGET +#endif /* TYPEDEF_PANEL_WIDGET */ + +typedef struct _PanelWidgetClass PanelWidgetClass; + +typedef struct _AppletRecord AppletRecord; +typedef struct _AppletData AppletData; +typedef struct _DNDRecord DNDRecord; + +typedef struct _AppletSizeHints AppletSizeHints; +typedef struct _AppletSizeHintsAlloc AppletSizeHintsAlloc; + +struct _AppletSizeHints { + int *hints; + int len; +}; + +struct _AppletSizeHintsAlloc { + int index; + int size; +}; + +struct _AppletData +{ + GtkWidget * applet; + int pos; + int constrained; + int cells; + int min_cells; + + int drag_off; /* offset on the applet where drag + was started */ + + int no_die; /* if >0 never send the about to die + signal, an int and not a bool for + nesting reasons */ + + /* Valid size ranges for expanded applets */ + int * size_hints; + int size_hints_len; + + guint size_constrained : 1; + guint expand_major : 1; + guint expand_minor : 1; + guint locked : 1; + +}; + +struct _PanelWidget +{ + GtkFixed fixed; + + GList *applet_list; + + GSList *open_dialogs; + + int size; + GtkOrientation orient; + int sz; + + AppletData *currently_dragged_applet; + + int thick; + + PanelBackground background; + + GtkWidget *master_widget; + + GtkWidget *drop_widget; /* widget that the panel checks for + * the cursor on drops usually the + * panel widget itself + */ + + PanelToplevel *toplevel; + + GdkEventKey *key_event; + + /* helpers to get a good size in packed panels with applets using + * size hints */ + int nb_applets_size_hints; + AppletSizeHints *applets_hints; + AppletSizeHintsAlloc *applets_using_hint; + + guint packed : 1; +}; + +struct _PanelWidgetClass +{ + GtkFixedClass parent_class; + + void (* size_change) (PanelWidget *panel); + void (* back_change) (PanelWidget *panel); + void (* applet_move) (PanelWidget *panel, + GtkWidget *applet); + void (* applet_added) (PanelWidget *panel, + GtkWidget *applet); + void (* applet_removed) (PanelWidget *panel, + GtkWidget *applet); + void (* push_move) (PanelWidget *panel, + GtkDirectionType dir); + void (* switch_move) (PanelWidget *panel, + GtkDirectionType dir); + void (* free_move) (PanelWidget *panel, + GtkDirectionType dir); + void (* tab_move) (PanelWidget *panel, + gboolean next); + void (* end_move) (PanelWidget *panel); +}; + +GType panel_widget_get_type (void) G_GNUC_CONST; + +GtkWidget * panel_widget_new (PanelToplevel *toplevel, + gboolean packed, + GtkOrientation orient, + int sz); +/*add an applet to the panel, preferably at position pos, if insert_at_pos + is on, we REALLY want to insert at the pos given by pos*/ +int panel_widget_add (PanelWidget *panel, + GtkWidget *applet, + gboolean locked, + int pos, + gboolean insert_at_pos); + +/*needs to be called for drawers after add*/ +void panel_widget_add_forbidden (PanelWidget *panel); + +/*move applet to a different panel*/ +int panel_widget_reparent (PanelWidget *old_panel, + PanelWidget *new_panel, + GtkWidget *applet, + int pos); + +/* use these for drag_off for special cases */ +#define PW_DRAG_OFF_CURSOR -1 +#define PW_DRAG_OFF_CENTER -2 + +/*drag*/ +gboolean mate_panel_applet_is_in_drag (void); +void panel_widget_applet_drag_start (PanelWidget *panel, + GtkWidget *applet, + int drag_off, + guint32 time_); +void panel_widget_applet_drag_end (PanelWidget *panel); + +void panel_widget_set_packed (PanelWidget *panel_widget, + gboolean packed); +void panel_widget_set_orientation (PanelWidget *panel_widget, + GtkOrientation orientation); +void panel_widget_set_size (PanelWidget *panel_widget, + int size); + +/*draw EVERYTHING (meaning icons)*/ +void panel_widget_draw_all (PanelWidget *panel, + GdkRectangle *area); +/*draw just one icon (applet has to be an icon of course)*/ +void panel_widget_draw_icon (PanelWidget *panel, + ButtonWidget *applet); + + +/*tells us if an applet is "stuck" on the right side*/ +int panel_widget_is_applet_stuck (PanelWidget *panel, + GtkWidget *applet); +/*get pos of the cursor location in panel coordinates*/ +int panel_widget_get_cursorloc (PanelWidget *panel); + +/*needed for other panel types*/ +gboolean panel_widget_is_cursor (PanelWidget *panel, + int overlap); +/* set the focus on the panel */ +void panel_widget_focus (PanelWidget *panel); + +PanelOrientation panel_widget_get_applet_orientation (PanelWidget *panel); + + +void panel_widget_set_applet_size_constrained (PanelWidget *panel, + GtkWidget *applet, + gboolean size_constrained); +void panel_widget_set_applet_expandable (PanelWidget *panel, + GtkWidget *applet, + gboolean major, + gboolean minor); +void panel_widget_set_applet_size_hints (PanelWidget *panel, + GtkWidget *applet, + int *size_hints, + int size_hints_len); + +void panel_widget_set_applet_locked (PanelWidget *panel, + GtkWidget *applet, + gboolean locked); +gboolean panel_widget_get_applet_locked (PanelWidget *panel, + GtkWidget *applet); +gboolean panel_widget_toggle_applet_locked (PanelWidget *panel, + GtkWidget *applet); + +void panel_widget_register_open_dialog (PanelWidget *panel, + GtkWidget *dialog); +#ifdef __cplusplus +} +#endif + +#endif /* PANEL_WIDGET_H */ -- cgit v1.2.1