From bf03a9682d6ebd56f512d8ee7192cf4908bdb00f Mon Sep 17 00:00:00 2001 From: =?utf-8?q?Beno=C3=AEt=20Gschwind?= Date: Thu, 14 Feb 2008 22:17:22 +0100 Subject: [PATCH] add a frame trigger function --- engines/concept/plugin.c | 42 ++++++++++++++-------- engines/concept/plugin.h | 2 +- engines/default/plugin.c | 87 ++++++++++++++++++++++++++++++++++++-------- engines/default/plugin.h | 2 + openbox/engine_interface.h | 28 ++++++++++----- 5 files changed, 120 insertions(+), 41 deletions(-) diff --git a/engines/concept/plugin.c b/engines/concept/plugin.c index 30f52e6..9778c44 100644 --- a/engines/concept/plugin.c +++ b/engines/concept/plugin.c @@ -1119,27 +1119,39 @@ ObFramePlugin plugin = { 0, //gpointer handler; frame_adjust_shape, //void (*frame_adjust_shape) (gpointer self); frame_grab, //void (*frame_adjust_area) (gpointer self, gboolean moved, gboolean resized, gboolean fake); frame_ungrab, frame_context, //void (*frame_adjust_state) (gpointer self); - frame_set_is_visible, frame_set_is_focus, frame_set_is_max_vert, - frame_set_is_max_horz, frame_set_is_shaded, - - frame_flash_start, frame_flash_stop, frame_begin_iconify_animation, - frame_end_iconify_animation, frame_iconify_animating, - - frame_set_decorations, + frame_set_is_visible, /* */ + frame_set_is_focus, /* */ + frame_set_is_max_vert, /* */ + frame_set_is_max_horz, /* */ + frame_set_is_shaded, /* */ + frame_flash_start, /* */ + frame_flash_stop, /* */ + frame_begin_iconify_animation, /* */ + frame_end_iconify_animation, /* */ + frame_iconify_animating, /* */ + + frame_set_decorations, /* */ /* This give the window area */ - frame_get_window_area, frame_set_client_area, + frame_get_window_area, /* */ + frame_set_client_area, /* */ /* Draw the frame */ - frame_update_layout, frame_update_skin, - - frame_set_hover_flag, frame_set_press_flag, + frame_update_layout, /* */ + frame_update_skin, /* */ - frame_get_window, + frame_set_hover_flag, /* */ + frame_set_press_flag, /* */ - frame_get_size, frame_get_decorations, + frame_get_window, /* */ + + frame_get_size, /* */ + frame_get_decorations, /* */ - frame_is_visible, frame_is_max_horz, frame_is_max_vert, + frame_is_visible, /* */ + frame_is_max_horz, frame_is_max_vert, /* */ + + NULL, /* */ - load_theme_config, + load_theme_config, /* */ /* This fields are fill by openbox. */ 0, //Display * ob_display; diff --git a/engines/concept/plugin.h b/engines/concept/plugin.h index 0f22499..0182320 100644 --- a/engines/concept/plugin.h +++ b/engines/concept/plugin.h @@ -162,7 +162,7 @@ void frame_end_iconify_animation(gpointer self); gboolean frame_iconify_animating(gpointer _self); /* Set the layout wanted by client */ -void frame_update_state(gpointer, ObFrameState); +/*void frame_update_state(gpointer, ObFrameState);*/ /* This give the allowed area for client window */ Rect frame_get_window_area(gpointer); void frame_set_client_area(gpointer, Rect); diff --git a/engines/default/plugin.c b/engines/default/plugin.c index a8adc86..9040fb3 100644 --- a/engines/default/plugin.c +++ b/engines/default/plugin.c @@ -1778,6 +1778,48 @@ void layout_title(ObDefaultFrame * self) XUnmapWindow(plugin.ob_display, self->label); } +void frame_trigger(gpointer frame, ObFrameTrigger trigger_name) +{ + switch(trigger_name) + { + case OB_TRIGGER_NORMAL: + /* TODO */ + break; + case OB_TRIGGER_INCONIFIED: + /* TODO */ + break; + case OB_TRIGGER_SHADED: + /* TODO */ + break; + case OB_TRIGGER_MAX: + /* TODO */ + break; + case OB_TRIGGER_MAX_VERT: + /* TODO */ + break; + case OB_TRIGGER_MAX_HORZ: + /* TODO */ + break; + case OB_TRIGGER_NO_BORDER: + /* TODO */ + break; + case OB_TRIGGER_PLUGIN1: + /* TODO */ + break; + case OB_TRIGGER_PLUGIN2: + /* TODO */ + break; + case OB_TRIGGER_PLUGIN3: + /* TODO */ + break; + case OB_TRIGGER_PLUGIN4: + /* TODO */ + break; + default: + break; + } +} + ObFramePlugin plugin = { 0, //gpointer handler; "libdefault.la", //gchar * filename; "Default", //gchar * name; @@ -1790,34 +1832,47 @@ ObFramePlugin plugin = { 0, //gpointer handler; frame_adjust_shape, //void (*frame_adjust_shape) (gpointer self); frame_grab, //void (*frame_adjust_area) (gpointer self, gboolean moved, gboolean resized, gboolean fake); frame_ungrab, frame_context, //void (*frame_adjust_state) (gpointer self); - frame_set_is_visible, frame_set_is_focus, frame_set_is_max_vert, - frame_set_is_max_horz, frame_set_is_shaded, - - frame_flash_start, frame_flash_stop, frame_begin_iconify_animation, - frame_end_iconify_animation, frame_iconify_animating, - - frame_set_decorations, + frame_set_is_visible, /* */ + frame_set_is_focus, /* */ + frame_set_is_max_vert, /* */ + frame_set_is_max_horz, /* */ + frame_set_is_shaded, /* */ + + frame_flash_start, /* */ + frame_flash_stop, /* */ + frame_begin_iconify_animation, /* */ + frame_end_iconify_animation, /* */ + frame_iconify_animating, /* */ + + frame_set_decorations, /* */ /* This give the window area */ - frame_get_window_area, frame_set_client_area, + frame_get_window_area, /* */ + frame_set_client_area, /* */ /* Draw the frame */ - frame_update_layout, frame_update_skin, + frame_update_layout, /* */ + frame_update_skin, /* */ - frame_set_hover_flag, frame_set_press_flag, + frame_set_hover_flag, /* */ + frame_set_press_flag, /* */ - frame_get_window, + frame_get_window,/* */ - frame_get_size, frame_get_decorations, + frame_get_size, /* */ + frame_get_decorations, /* */ - frame_is_visible, frame_is_max_horz, frame_is_max_vert, + frame_is_visible, /* */ + frame_is_max_horz, /* */ + frame_is_max_vert, /* */ + + NULL, /* */ - load_theme_config, + load_theme_config, /* */ /* This fields are fill by openbox. */ 0, //Display * ob_display; 0, //gint ob_screen; 0, //RrInstance *ob_rr_inst; - // 0, //RrTheme *ob_rr_theme; - 0, //gboolean config_theme_keepborder; + 0, //gboolean config_theme_keepborder; 0, //struct _ObClient *focus_cycle_target; 0, //gchar *config_title_layout; FALSE, //gboolean moveresize_in_progress; diff --git a/engines/default/plugin.h b/engines/default/plugin.h index b2c3a7d..32fc010 100644 --- a/engines/default/plugin.h +++ b/engines/default/plugin.h @@ -218,6 +218,8 @@ void free_theme_statics(gpointer self); gboolean frame_animate_iconify(gpointer self); void frame_adjust_cursors(gpointer self); +void frame_trigger(gpointer, ObFrameTrigger); + /* Global for renderframe.c only */ extern ObFramePlugin plugin; #define OBDEFAULTFRAME(x) ((ObDefaultFrame *)(x)) diff --git a/openbox/engine_interface.h b/openbox/engine_interface.h index e7d4c67..6909eb2 100644 --- a/openbox/engine_interface.h +++ b/openbox/engine_interface.h @@ -87,16 +87,22 @@ typedef enum OB_BUTTON_ICONIFY = 5 } ObFrameButton; +/* The plugin must implement standars triggers and is free to use other + * It's mimic signal (USR1 and USR2) */ typedef enum { - OB_FRAME_STATE_NORMAL, - OB_FRAME_STATE_INCONIFIED, - OB_FRAME_STATE_SHADED, - OB_FRAME_STATE_MAX, - OB_FRAME_STATE_MAX_VERT, - OB_FRAME_STATE_MAX_HORZ, - OB_FRAME_STATE_NO_BORDER -} ObFrameState; + OB_TRIGGER_NORMAL, + OB_TRIGGER_INCONIFIED, + OB_TRIGGER_SHADED, + OB_TRIGGER_MAX, + OB_TRIGGER_MAX_VERT, + OB_TRIGGER_MAX_HORZ, + OB_TRIGGER_NO_BORDER, + OB_TRIGGER_PLUGIN1, + OB_TRIGGER_PLUGIN2, + OB_TRIGGER_PLUGIN3, + OB_TRIGGER_PLUGIN4, /* ... */ +} ObFrameTrigger; struct _ObFramePlugin { @@ -147,9 +153,10 @@ struct _ObFramePlugin Rect (*frame_get_window_area)(gpointer); /* set the requested client area */ void (*frame_set_client_area)(gpointer, Rect); - /* Draw the frame */ + /* Update size, move/resize windows */ void (*frame_update_layout)(gpointer self, gboolean is_resize, gboolean is_fake); + /* Update skin, color/texture windows */ void (*frame_update_skin)(gpointer); void (*frame_set_hover_flag)(gpointer, ObFrameButton); @@ -163,6 +170,9 @@ struct _ObFramePlugin gboolean (*frame_is_visible)(gpointer); gboolean (*frame_is_max_horz)(gpointer); gboolean (*frame_is_max_vert)(gpointer); + + /* This must implement triggers (currently not used) */ + void (*frame_trigger)(gpointer, ObFrameTrigger); gint (*load_theme_config)(const RrInstance *inst, const gchar *name, const gchar * path, XrmDatabase db, RrFont *active_window_font, -- 1.5.3.7