if (new_anim) {
obt_main_loop_timeout_remove_data(plugin.ob_main_loop,
frame_animate_iconify, self, FALSE);
- obt_main_loop_timeout_add(plugin.ob_main_loop,
+ obt_main_loop_timeout_add(plugin.ob_main_loop,
FRAME_ANIMATE_ICONIFY_STEP_TIME, frame_animate_iconify, self,
g_direct_equal, NULL);
if (self->decorations & OB_FRAME_DECOR_HANDLE
&& theme_config.handle_height > 0) {
XMoveResizeWindow(plugin.ob_display, self->handletop,
- theme_config.grip_width + self->bwidth + sidebwidth,
+ theme_config.grip_width + self->bwidth + sidebwidth,
FRAME_HANDLE_Y(self), self->width - (theme_config.grip_width
+ sidebwidth) * 2, self->bwidth);
XMapWindow(plugin.ob_display, self->handletop);
theme_config.handle_height);
XMoveResizeWindow(plugin.ob_display, self->lgriptop,
- sidebwidth,
+ sidebwidth,
FRAME_HANDLE_Y(self), theme_config.grip_width
+ self->bwidth, self->bwidth);
XMoveResizeWindow(plugin.ob_display, self->rgriptop,
self->size.left + self->client_area.width
+ self->size.right - self->bwidth
- - sidebwidth - theme_config.grip_width,
+ - sidebwidth - theme_config.grip_width,
FRAME_HANDLE_Y(self), theme_config.grip_width
+ self->bwidth, self->bwidth);
if (self->decorations & OB_FRAME_DECOR_HANDLE
&& theme_config.handle_height > 0) {
- XMoveResizeWindow(plugin.ob_display, self->handle, sidebwidth,
+ XMoveResizeWindow(plugin.ob_display, self->handle, sidebwidth,
FRAME_HANDLE_Y(self) + self->bwidth, self->width,
theme_config.handle_height);
XMapWindow(plugin.ob_display, self->handle);
XUnmapWindow(plugin.ob_display, self->label);
}
-void frame_trigger(gpointer frame, ObFrameTrigger trigger_name)
+void trigger_none (gpointer self) {}
+void trigger_iconify(gpointer self) {}
+void trigger_uniconnity(gpointer self) {}
+void trigger_iconify_toggle(gpointer self) {}
+void trigger_shade(gpointer self) {}
+void trigger_unshade(gpointer self) {}
+void trigger_shade_toggle(gpointer self) {}
+void trigger_max(gpointer self) {}
+void trigger_unmax(gpointer self) {}
+void trigger_max_troggle(gpointer self) {}
+void trigger_max_vert(gpointer self) {OBDEFAULTFRAME(self)->max_vert = TRUE;}
+void trigger_unmax_vert(gpointer self) {OBDEFAULTFRAME(self)->max_vert = FALSE;}
+void trigger_max_toggle(gpointer self) {}
+void trigger_max_horz(gpointer self) {OBDEFAULTFRAME(self)->max_horz = TRUE;}
+void trigger_unmax_horz(gpointer self) {OBDEFAULTFRAME(self)->max_horz = FALSE;}
+void trigger_max_horz_toggle(gpointer self) {}
+void trigger_plugin1(gpointer self) {}
+void trigger_plugin2(gpointer self) {}
+void trigger_plugin3(gpointer self) {}
+void trigger_plugin4(gpointer self) {}
+void trigger_plugin5(gpointer self) {}
+void trigger_plugin6(gpointer self) {}
+void trigger_plugin7(gpointer self) {}
+void trigger_plugin8(gpointer self) {}
+void trigger_plugin9(gpointer self) {}
+
+void frame_trigger(gpointer self, ObFrameTrigger trigger_name)
{
- switch(trigger_name)
+
+ static void (*trigger_func[64])(gpointer) = {
+ trigger_none,
+ trigger_iconify,
+ trigger_uniconnity,
+ trigger_iconify_toggle,
+ trigger_shade,
+ trigger_unshade,
+ trigger_shade_toggle,
+ trigger_max,
+ trigger_unmax,
+ trigger_max_troggle,
+ trigger_max_vert,
+ trigger_unmax_vert,
+ trigger_max_toggle,
+ trigger_max_horz,
+ trigger_unmax_horz,
+ trigger_max_horz_toggle,
+ trigger_plugin1,
+ trigger_plugin2,
+ trigger_plugin3,
+ trigger_plugin4,
+ trigger_plugin5,
+ trigger_plugin6,
+ trigger_plugin7,
+ trigger_plugin8,
+ trigger_plugin9,
+ NULL,
+ };
+
+ void (*call_trigger_func)(gpointer) = trigger_func[trigger_name];
+ if(!call_trigger_func)
{
- 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;
+ call_trigger_func (self);
}
}
frame_is_visible, /* */
frame_is_max_horz, /* */
frame_is_max_vert, /* */
-
- NULL, /* */
+
+ frame_trigger, /* */
load_theme_config, /* */
}
self->fullscreen = self->max_horz = self->max_vert = FALSE;
+ render_plugin->frame_trigger(self, OB_TRIGGER_UNMAX_VERT);
+ render_plugin->frame_trigger(self, OB_TRIGGER_UNMAX_HORZ);
/* let it be moved and resized no matter what */
self->functions = OB_CLIENT_FUNC_MOVE | OB_CLIENT_FUNC_RESIZE;
self->decorations = 0; /* unmanaged windows have no decor */
self->max_vert = self->session->max_vert;
self->undecorated = self->session->undecorated;
- render_plugin->frame_set_is_max_horz (self->frame, self->max_horz);
- render_plugin->frame_set_is_max_vert (self->frame, self->max_vert);
+ if (self->session->max_horz) {
+ render_plugin->frame_trigger(self->frame, OB_TRIGGER_MAX_HORZ);
+ }
+ else {
+ render_plugin->frame_trigger(self->frame, OB_TRIGGER_UNMAX_HORZ);
+ }
+
+ if (self->session->max_vert) {
+ render_plugin->frame_trigger(self->frame, OB_TRIGGER_MAX_VERT);
+ }
+ else {
+ render_plugin->frame_trigger(self->frame, OB_TRIGGER_UNMAX_VERT);
+ }
}
static gboolean client_restore_session_stacking(ObClient *self)
self->skip_pager = TRUE;
else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_FULLSCREEN))
self->fullscreen = TRUE;
- else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_VERT))
+ else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_VERT)) {
self->max_vert = TRUE;
- else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_HORZ))
+ render_plugin->frame_trigger(self->frame, OB_TRIGGER_MAX_VERT);
+ }
+ else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_MAXIMIZED_HORZ)) {
self->max_horz = TRUE;
+ render_plugin->frame_trigger(self->frame, OB_TRIGGER_MAX_HORZ);
+ }
else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_ABOVE))
self->above = TRUE;
else if (state[i] == OBT_PROP_ATOM(NET_WM_STATE_BELOW))
if (!(self->functions & OB_CLIENT_FUNC_MAXIMIZE) && (self->max_horz ||
self->max_vert)) {
if (self->frame) client_maximize(self, FALSE, 0);
- else self->max_vert = self->max_horz = FALSE;
- render_plugin->frame_set_is_max_horz (self->frame, self->max_horz);
- render_plugin->frame_set_is_max_vert (self->frame, self->max_vert);
+ else {
+ self->max_vert = self->max_horz = FALSE;
+ render_plugin->frame_trigger (self->frame, OB_TRIGGER_UNMAX_VERT);
+ render_plugin->frame_trigger (self->frame, OB_TRIGGER_UNMAX_HORZ);
+ }
+
}
}
OBT_PROP_SETA32(self->window, NET_WM_STATE, ATOM, netstate, num);
if (self->frame)
- render_plugin->frame_update_layout (self->frame, FALSE, FALSE);
+ render_plugin->frame_update_layout (self->frame, FALSE, FALSE);
}
ObClient *client_search_focus_tree(ObClient *self)
render_plugin->frame_set_client_area (self->frame, self->area);
render_plugin->frame_set_decorations (self->frame, self->decorations);
render_plugin->frame_update_layout (self->frame, FALSE, FALSE);
- render_plugin->frame_set_is_max_horz (self->frame, self->max_horz);
- render_plugin->frame_set_is_max_vert (self->frame, self->max_vert);
client_configure(self, x, y, w, h, FALSE, TRUE, FALSE);
/* set the desktop hint, to make sure that it always exists */
}
}
- if (dir == 0 || dir == 1) /* horz */
- self->max_horz = max;
- if (dir == 0 || dir == 2) /* vert */
- self->max_vert = max;
+ if (dir == 0 || dir == 1) {
+ self->max_horz = max; /* horz */
+ render_plugin->frame_trigger(self->frame, max? OB_TRIGGER_MAX_HORZ : OB_TRIGGER_UNMAX_HORZ);
+ }
- render_plugin->frame_set_is_max_horz (self->frame, self->max_horz);
- render_plugin->frame_set_is_max_vert (self->frame, self->max_vert);
+ if (dir == 0 || dir == 2){
+ self->max_vert = max; /* vert */
+ render_plugin->frame_trigger(self->frame, max? OB_TRIGGER_MAX_VERT : OB_TRIGGER_UNMAX_VERT);
+ }
client_change_state(self); /* change the state hints on the client */
* It's mimic signal (USR1 and USR2) */
typedef enum
{
- OB_TRIGGER_NORMAL,
- OB_TRIGGER_INCONIFIED,
- OB_TRIGGER_SHADED,
+ OB_TRIGGER_NONE,
+ OB_TRIGGER_INCONIFY,
+ OB_TRIGGER_UNICONIFY,
+ OB_TRIGGER_INCONIFY_TOGGLE,
+ OB_TRIGGER_SHADE,
+ OB_TRIGGER_UNSHADE,
+ OB_TRIGGER_SHADE_TOGGLE,
OB_TRIGGER_MAX,
+ OB_TRIGGER_UNMAX,
+ OB_TRIGGER_MAX_TOGGLE,
OB_TRIGGER_MAX_VERT,
+ OB_TRIGGER_UNMAX_VERT,
+ OB_TRIGGER_MAX_VERT_TOGGLE,
OB_TRIGGER_MAX_HORZ,
- OB_TRIGGER_NO_BORDER,
+ OB_TRIGGER_UNMAX_HORZ,
+ OB_TRIGGER_MAX_HORZ_TOGGLE,
OB_TRIGGER_PLUGIN1,
OB_TRIGGER_PLUGIN2,
OB_TRIGGER_PLUGIN3,
OB_TRIGGER_PLUGIN4, /* ... */
+ OB_TRIGGER_PLUGIN5, /* ... */
+ OB_TRIGGER_PLUGIN6, /* ... */
+ OB_TRIGGER_PLUGIN7, /* ... */
+ OB_TRIGGER_PLUGIN8, /* ... */
+ OB_TRIGGER_PLUGIN9, /* ... */
} ObFrameTrigger;
struct _ObFramePlugin