X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=engines%2Fopenbox%2Fopenbox.c;h=c488efbaf4dbef8cd6e8a92591dec74df6dc9c36;hb=db75d406ce6194dd85c142616071e55f9b831f60;hp=3fccd2330b1d0357fa344fc40fc886cfa298cd27;hpb=6abd9fe80192a2a19b563f20302412520e13b57d;p=chaz%2Fopenbox diff --git a/engines/openbox/openbox.c b/engines/openbox/openbox.c index 3fccd233..c488efba 100644 --- a/engines/openbox/openbox.c +++ b/engines/openbox/openbox.c @@ -2,6 +2,7 @@ #include "../../kernel/openbox.h" #include "../../kernel/screen.h" #include "../../kernel/extensions.h" +#include "../../kernel/dispatch.h" #include "../../kernel/themerc.h" #include "../../kernel/frame.h" #include "../../render/render.h" @@ -22,6 +23,9 @@ #define PLATE_EVENTMASK (SubstructureRedirectMask | ButtonPressMask) #define FRAME_EVENTMASK (EnterWindowMask | LeaveWindowMask) +#define ELEMENT_EVENTMASK (ButtonPressMask | ButtonReleaseMask | \ + ButtonMotionMask | ExposureMask | \ + EnterWindowMask | LeaveWindowMask) /* style settings - geometry */ int s_bevel; @@ -126,6 +130,9 @@ static void render_iconify(ObFrame *self); static void render_desk(ObFrame *self); static void render_close(ObFrame *self); +static void frame_mouse_press(const ObEvent *e, ObFrame *self); +static void frame_mouse_release(const ObEvent *e, ObFrame *self); + gboolean startup() { g_quark_from_string("none"); @@ -238,10 +245,8 @@ void shutdown() static Window createWindow(Window parent, unsigned long mask, XSetWindowAttributes *attrib) { - /* XXX DONT USE THE DEFAULT SHIT */ return XCreateWindow(ob_display, parent, 0, 0, 1, 1, 0, - DefaultDepth(ob_display, ob_screen), InputOutput, - DefaultVisual(ob_display, ob_screen), + render_depth, InputOutput, render_visual, mask, attrib); } @@ -266,8 +271,7 @@ Frame *frame_new() self->frame.plate = createWindow(self->frame.window, mask, &attrib); mask = CWEventMask; - attrib.event_mask = (ButtonPressMask | ButtonReleaseMask | - ButtonMotionMask | ExposureMask); + attrib.event_mask = ELEMENT_EVENTMASK; self->title = createWindow(self->frame.window, mask, &attrib); self->label = createWindow(self->title, mask, &attrib); self->max = createWindow(self->title, mask, &attrib); @@ -314,6 +318,11 @@ Frame *frame_new() self->max_press = self->close_press = self->desk_press = self->iconify_press = FALSE; + dispatch_register(Event_X_ButtonPress, (EventHandler)frame_mouse_press, + self); + dispatch_register(Event_X_ButtonRelease, (EventHandler)frame_mouse_release, + self); + return (Frame*)self; } @@ -329,6 +338,9 @@ static void frame_free(ObFrame *self) XDestroyWindow(ob_display, self->frame.window); + dispatch_register(0, (EventHandler)frame_mouse_press, self); + dispatch_register(0, (EventHandler)frame_mouse_release, self); + g_free(self); } @@ -719,7 +731,7 @@ static void layout_title(ObFrame *self) static void render(ObFrame *self) { - if (self->frame.client->focused) { + if (client_focused(self->frame.client)) { XSetWindowBorder(ob_display, self->frame.plate, s_cb_focused_color->pixel); } else { @@ -728,7 +740,7 @@ static void render(ObFrame *self) } if (self->frame.client->decorations & Decor_Titlebar) { - paint(self->title, (self->frame.client->focused ? + paint(self->title, (client_focused(self->frame.client) ? self->a_focused_title : self->a_unfocused_title), 0, 0, self->width, TITLE_HEIGHT); @@ -741,16 +753,16 @@ static void render(ObFrame *self) } if (self->frame.client->decorations & Decor_Handle) { - paint(self->handle, (self->frame.client->focused ? + paint(self->handle, (client_focused(self->frame.client) ? self->a_focused_handle : self->a_unfocused_handle), GRIP_WIDTH + self->bwidth, 0, HANDLE_WIDTH(self), s_handle_height); - paint(self->lgrip, (self->frame.client->focused ? + paint(self->lgrip, (client_focused(self->frame.client) ? a_focused_grip : a_unfocused_grip), 0, 0, GRIP_WIDTH, s_handle_height); - paint(self->rgrip, (self->frame.client->focused ? + paint(self->rgrip, (client_focused(self->frame.client) ? a_focused_grip : a_unfocused_grip), 0, 0, GRIP_WIDTH, s_handle_height); @@ -763,7 +775,7 @@ static void render_label(ObFrame *self) if (self->label_x < 0) return; - a = (self->frame.client->focused ? + a = (client_focused(self->frame.client) ? self->a_focused_label : self->a_unfocused_label); /* set the texture's text! */ @@ -787,7 +799,7 @@ static void render_max(ObFrame *self) if (self->max_x < 0) return; - paint(self->max, (self->frame.client->focused ? + paint(self->max, (client_focused(self->frame.client) ? (press ? a_focused_pressed_max : a_focused_unpressed_max) : @@ -801,7 +813,7 @@ static void render_iconify(ObFrame *self) { if (self->iconify_x < 0) return; - paint(self->iconify, (self->frame.client->focused ? + paint(self->iconify, (client_focused(self->frame.client) ? (self->iconify_press ? a_focused_pressed_iconify : a_focused_unpressed_iconify) : @@ -818,7 +830,7 @@ static void render_desk(ObFrame *self) if (self->desk_x < 0) return; - paint(self->desk, (self->frame.client->focused ? + paint(self->desk, (client_focused(self->frame.client) ? (press ? a_focused_pressed_desk : a_focused_unpressed_desk) : @@ -832,7 +844,7 @@ static void render_close(ObFrame *self) { if (self->close_x < 0) return; - paint(self->close, (self->frame.client->focused ? + paint(self->close, (client_focused(self->frame.client) ? (self->close_press ? a_focused_pressed_close : a_focused_unpressed_close) : @@ -867,49 +879,37 @@ GQuark get_context(Client *client, Window win) return g_quark_try_string("none"); } -void frame_mouse_enter(ObFrame *self, Window win) -{ -} - -void frame_mouse_leave(ObFrame *self, Window win) -{ -} - -void frame_mouse_press(ObFrame *self, Window win, int x, int y) +static void frame_mouse_press(const ObEvent *e, ObFrame *self) { + Window win = e->data.x.e->xbutton.window; if (win == self->max) { self->max_press = TRUE; render_max(self); - } - else if (win == self->close) { + } else if (win == self->close) { self->close_press = TRUE; render_close(self); - } - else if (win == self->iconify) { + } else if (win == self->iconify) { self->iconify_press = TRUE; render_iconify(self); - } - else if (win == self->desk) { + } else if (win == self->desk) { self->desk_press = TRUE; render_desk(self); } } -void frame_mouse_release(ObFrame *self, Window win, int x, int y) +static void frame_mouse_release(const ObEvent *e, ObFrame *self) { + Window win = e->data.x.e->xbutton.window; if (win == self->max) { self->max_press = FALSE; render_max(self); - } - else if (win == self->close) { + } else if (win == self->close) { self->close_press = FALSE; render_close(self); - } - else if (win == self->iconify) { + } else if (win == self->iconify) { self->iconify_press = FALSE; render_iconify(self); - } - else if (win == self->desk) { + } else if (win == self->desk) { self->desk_press = FALSE; render_desk(self); }