#include "phluid.h"
#include "debug.h"
void
button_press(XEvent ev)
{
Client *c;
int mouse_x, mouse_y;
DEBUG_PRINT("got ButtonPress\n");
get_mouse_x_y(&mouse_x, &mouse_y);
if(ev.xbutton.window == root) {
switch(ev.xbutton.button) {
case Button2:
system("gtk-switch &");
break;
default:
system("gtk-panel &");
break;
}
}
c = find_client_by_frame(ev.xbutton.window);
if (c) {
Decal *decal;
XEvent peek;
decal = decal_at(c, ev.xbutton.x, ev.xbutton.y);
XPeekEvent(disp, &peek);
if (decal) {
Decal *tmp_decal;
XEvent tmp_ev;
XMaskEvent(disp, ButtonReleaseMask, &tmp_ev);
tmp_decal = decal_at(c, tmp_ev.xbutton.x, tmp_ev.xbutton.y);
if(tmp_decal == decal)
do_decal_fn(c, decal, ev.xbutton.button);
return;
}
if (ev.xbutton.button == Button2) {
shade_client(c);
XSync(disp, False);
icccm_send_configure_event(c);
return;
}
if (ev.xbutton.button == Button3) {
return;
}
/* the user let go immediately, so treat as click not drag */
if (peek.type == ButtonRelease) {
Window top;
Client *tmp;
char *name;
top = x_get_top_window();
XFetchName(disp, top, &name);
DEBUG_VAR("top window: %s\n", name);
XFree(name);
tmp = find_client_by_frame(top);
if (!tmp)
DEBUG_PRINT("top window not found as frame\n");
if (c->frame == top) {
DEBUG_PRINT("client is on top\n");
XLowerWindow(disp, c->frame);
} else {
DEBUG_PRINT("client is NOT on top\n");
XRaiseWindow(disp, c->frame);
}
}
/* motion before release detected, so drag and move */
if (peek.type == MotionNotify) {
drag_client(c, mouse_x, mouse_y);
if (MOVE_AFTER_DRAG) {
XMoveWindow(disp, c->frame, c->x, c->y);
}
XSync(disp,False);
if (SEND_CONFIGURE_AFTER_DRAG) {
icccm_send_configure_event(c);
}
}
}
}
syntax highlighted by Code2HTML, v. 0.9.1