Merge branch 'backport' into work Conflicts: openbox/menuframe.c openbox/prompt.c openbox/prop.c openbox/prop.h
Dana Jansens danakj@orodu.net
8 files changed,
102 insertions(+),
31 deletions(-)
M
obt/prop.c
→
obt/prop.c
@@ -62,6 +62,7 @@ CREATE(WM_WINDOW_ROLE);
CREATE(WM_CLIENT_MACHINE); CREATE(WM_COMMAND); CREATE(WM_CLIENT_LEADER); + CREATE(WM_TRANSIENT_FOR); CREATE_(MOTIF_WM_HINTS); CREATE(SM_CLIENT_ID);
M
obt/prop.h
→
obt/prop.h
@@ -51,6 +51,7 @@ OBT_PROP_WM_WINDOW_ROLE,
OBT_PROP_WM_CLIENT_MACHINE, OBT_PROP_WM_COMMAND, OBT_PROP_WM_CLIENT_LEADER, + OBT_PROP_WM_TRANSIENT_FOR, OBT_PROP_MOTIF_WM_HINTS, /* SM atoms */
M
openbox/client.c
→
openbox/client.c
@@ -1541,7 +1541,7 @@ /* defaults */
self->min_ratio = 0.0f; self->max_ratio = 0.0f; SIZE_SET(self->size_inc, 1, 1); - SIZE_SET(self->base_size, 0, 0); + SIZE_SET(self->base_size, -1, -1); SIZE_SET(self->min_size, 0, 0); SIZE_SET(self->max_size, G_MAXINT, G_MAXINT);@@ -2817,7 +2817,7 @@ maxratio = self->fullscreen || (self->max_horz && self->max_vert) ?
0 : self->max_ratio; /* base size is substituted with min size if not specified */ - if (self->base_size.width || self->base_size.height) { + if (self->base_size.width >= 0 || self->base_size.height >= 0) { basew = self->base_size.width; baseh = self->base_size.height; } else {@@ -3364,7 +3364,7 @@ client_kill_requested, self);
g_free(m); } - prompt_show(self->kill_prompt, self); + prompt_show(self->kill_prompt, self, TRUE); } void client_kill(ObClient *self)
M
openbox/prompt.c
→
openbox/prompt.c
@@ -20,6 +20,7 @@ #include "prompt.h"
#include "openbox.h" #include "screen.h" #include "client.h" +#include "group.h" #include "event.h" #include "obt/display.h" #include "obt/keyboard.h"@@ -433,7 +434,7 @@ for (i = 0; i < self->n_buttons; ++i)
render_button(self, &self->button[i]); } -void prompt_show(ObPrompt *self, ObClient *parent) +void prompt_show(ObPrompt *self, ObClient *parent, gboolean modal) { gint i;@@ -455,8 +456,34 @@ self->focus = &self->button[i];
break; } - XSetTransientForHint(obt_display, self->super.window, - (parent ? parent->window : 0)); + if (parent) { + Atom states[1]; + gint nstates; + Window p; + XWMHints h; + + if (parent->group) { + /* make it transient for the window's group */ + h.flags = WindowGroupHint; + h.window_group = parent->group->leader; + p = obt_root(ob_screen); + } + else { + /* make it transient for the window directly */ + h.flags = 0; + p = parent->window; + } + + XSetWMHints(obt_display, self->super.window, &h); + OBT_PROP_SET32(self->super.window, WM_TRANSIENT_FOR, WINDOW, p); + + states[0] = OBT_PROP_ATOM(NET_WM_STATE_MODAL); + nstates = (modal ? 1 : 0); + OBT_PROP_SETA32(self->super.window, NET_WM_STATE, ATOM, + states, nstates); + } + else + OBT_PROP_ERASE(self->super.window, WM_TRANSIENT_FOR); /* set up the dialog and render it */ prompt_layout(self);
M
openbox/prompt.h
→
openbox/prompt.h
@@ -100,7 +100,7 @@ void prompt_ref(ObPrompt *self);
void prompt_unref(ObPrompt *self); /*! Show the prompt. It will be centered within the given area rectangle */ -void prompt_show(ObPrompt *self, struct _ObClient *parent); +void prompt_show(ObPrompt *self, struct _ObClient *parent, gboolean modal); void prompt_hide(ObPrompt *self); gboolean prompt_key_event(ObPrompt *self, XEvent *e);
M
render/theme.c
→
render/theme.c
@@ -211,6 +211,17 @@ theme->cbwidthx = theme->paddingx;
if (!read_int(db, "window.client.padding.height", &theme->cbwidthy) || theme->cbwidthy < 0 || theme->cbwidthy > 100) theme->cbwidthy = theme->cbwidthx; + if (!read_int(db, "menu.separator.width", &theme->menu_sep_width) || + theme->menu_sep_width < 1 || theme->menu_sep_width > 100) + theme->menu_sep_width = 1; + if (!read_int(db, "menu.separator.padding.width", + &theme->menu_sep_paddingx) || + theme->menu_sep_paddingx < 0 || theme->menu_sep_paddingx > 100) + theme->menu_sep_paddingx = 6; + if (!read_int(db, "menu.separator.padding.height", + &theme->menu_sep_paddingy) || + theme->menu_sep_paddingy < 0 || theme->menu_sep_paddingy > 100) + theme->menu_sep_paddingy = 3; /* load colors */ if (!read_color(db, inst,@@ -408,6 +419,12 @@ if (!read_color(db, inst,
"menu.items.active.text.color", &theme->menu_selected_color)) theme->menu_selected_color = RrColorNew(inst, 0, 0, 0); + if (!read_color(db, inst, + "menu.separator.color", &theme->menu_sep_color)) + theme->menu_sep_color = RrColorNew(inst, + theme->menu_color->r, + theme->menu_color->g, + theme->menu_color->b); /* load the image masks */@@ -1418,6 +1435,7 @@ RrColorFree(theme->titlebut_unfocused_pressed_color);
RrColorFree(theme->titlebut_focused_unpressed_color); RrColorFree(theme->titlebut_unfocused_unpressed_color); RrColorFree(theme->menu_title_color); + RrColorFree(theme->menu_sep_color); RrColorFree(theme->menu_color); RrColorFree(theme->menu_selected_color); RrColorFree(theme->menu_disabled_color);
M
render/theme.h
→
render/theme.h
@@ -47,6 +47,9 @@ gint cbwidthx;
gint cbwidthy; gint menu_overlap_x; gint menu_overlap_y; + gint menu_sep_width; + gint menu_sep_paddingx; + gint menu_sep_paddingy; /* these ones are calculated, not set directly by the theme file */ gint win_font_height; gint menu_title_font_height;@@ -84,6 +87,7 @@ RrColor *titlebut_unfocused_pressed_color;
RrColor *titlebut_focused_unpressed_color; RrColor *titlebut_unfocused_unpressed_color; RrColor *menu_title_color; + RrColor *menu_sep_color; RrColor *menu_color; RrColor *menu_selected_color; RrColor *menu_disabled_color;