all repos — openbox @ deca45dadad1e0e1d5183341a601267f2deb1aa5

openbox fork - make it a bit more like ryudo

key input works for ObPrompt windows now
Dana Jansens danakj@orodu.net
commit

deca45dadad1e0e1d5183341a601267f2deb1aa5

parent

a5005506a89ecffe13e04cbcda5c20a2fa6ba25d

4 files changed, 21 insertions(+), 6 deletions(-)

jump to
M openbox/client.copenbox/client.c

@@ -270,10 +270,10 @@ ob_debug("Managing window: 0x%lx\n", window);

map_time = event_get_server_time(); - /* choose the events we want to receive on the CLIENT window */ - attrib_set.event_mask = CLIENT_EVENTMASK; - if (prompt) - attrib_set.event_mask |= KeyPressMask; + /* choose the events we want to receive on the CLIENT window + (ObPrompt windows can request events too) */ + attrib_set.event_mask = CLIENT_EVENTMASK | + (prompt ? prompt->event_mask : 0); attrib_set.do_not_propagate_mask = CLIENT_NOPROPAGATEMASK; XChangeWindowAttributes(ob_display, window, CWEventMask|CWDontPropagate, &attrib_set);
M openbox/event.copenbox/event.c

@@ -478,6 +478,8 @@ dockapp = WINDOW_AS_DOCKAPP(obwin);

break; case Window_Client: client = WINDOW_AS_CLIENT(obwin); + /* events on clients can be events on prompt windows too */ + prompt = client->prompt; break; case Window_Menu: /* not to be used for events */

@@ -1677,7 +1679,6 @@ }

static void event_handle_prompt(ObPrompt *p, XEvent *e) { - g_print("prompt event\n"); switch (e->type) { case ButtonPress: case ButtonRelease:
M openbox/prompt.copenbox/prompt.c

@@ -63,6 +63,10 @@ prompt_a_button->texture[0] = ob_rr_theme->osd_hilite_label->texture[0];

prompt_a_focus->texture[0] = ob_rr_theme->osd_hilite_label->texture[0]; prompt_a_press->texture[0] = ob_rr_theme->osd_hilite_label->texture[0]; + prompt_a_button->texture[0].data.text.justify = RR_JUSTIFY_CENTER; + prompt_a_focus->texture[0].data.text.justify = RR_JUSTIFY_CENTER; + prompt_a_press->texture[0].data.text.justify = RR_JUSTIFY_CENTER; + prompt_a_button->texture[0].data.text.color = c_button; prompt_a_focus->texture[0].data.text.color = c_focus; prompt_a_press->texture[0].data.text.color = c_press;

@@ -112,6 +116,9 @@

/* make it a dialog type window */ PROP_SET32(self->super.window, net_wm_window_type, atom, prop_atoms.net_wm_window_type_dialog); + + /* listen for key presses on the window */ + self->event_mask = KeyPressMask; self->a_bg = RrAppearanceCopy(ob_rr_theme->osd_hilite_bg);

@@ -200,6 +207,8 @@

const gint OUTSIDE_MARGIN = 4; const gint MSG_BUTTON_SEPARATION = 4; const gint BUTTON_SEPARATION = 4; + const gint BUTTON_VMARGIN = 4; + const gint BUTTON_HMARGIN = 12; const gint MAX_WIDTH = 600; RrMargins(self->a_bg, &l, &t, &r, &b);

@@ -231,6 +240,9 @@ self->button[i].height = MAX(self->button[i].height, bh);

RrMinSize(prompt_a_press, &bw, &bh); self->button[i].width = MAX(self->button[i].width, bw); self->button[i].height = MAX(self->button[i].height, bh); + + self->button[i].width += BUTTON_HMARGIN * 2; + self->button[i].height += BUTTON_VMARGIN * 2; allbuttonsw += self->button[i].width + (i > 0 ? BUTTON_SEPARATION : 0); allbuttonsh = MAX(allbuttonsh, self->button[i].height);

@@ -280,7 +292,7 @@ {

RrAppearance *a; if (e->pressed) a = prompt_a_press; - else if (self->focus == e) a = prompt_a_focus, g_print("focus!\n"); + else if (self->focus == e) a = prompt_a_focus; else a = prompt_a_button; a->surface.parent = self->a_bg;
M openbox/prompt.hopenbox/prompt.h

@@ -41,6 +41,8 @@ {

InternalWindow super; gint ref; + guint event_mask; + /* keep a copy of this because we re-render things that may need it (i.e. the buttons) */ RrAppearance *a_bg;