static GdkFilterReturn panel_event_filter(GdkXEvent *xevent, GdkEvent *event, panel *p) { Atom at; Window win; XEvent *ev = (XEvent *) xevent; ENTER; DBG("win = 0x%lx\n", ev->xproperty.window); if (ev->type != PropertyNotify ) RET(GDK_FILTER_CONTINUE); at = ev->xproperty.atom; win = ev->xproperty.window; DBG("win=%lx at=%ld\n", win, at); if (win == GDK_ROOT_WINDOW()) { if (at == a_NET_CLIENT_LIST) { DBG("A_NET_CLIENT_LIST\n"); fb_ev_trigger(fbev, EV_CLIENT_LIST); } else if (at == a_NET_CURRENT_DESKTOP) { DBG("A_NET_CURRENT_DESKTOP\n"); p->curdesk = get_net_current_desktop(); fb_ev_trigger(fbev, EV_CURRENT_DESKTOP); } else if (at == a_NET_NUMBER_OF_DESKTOPS) { DBG("A_NET_NUMBER_OF_DESKTOPS\n"); p->desknum = get_net_number_of_desktops(); fb_ev_trigger(fbev, EV_NUMBER_OF_DESKTOPS); } else if (at == a_NET_DESKTOP_NAMES) { DBG("A_NET_DESKTOP_NAMES\n"); fb_ev_trigger(fbev, EV_DESKTOP_NAMES); } else if (at == a_NET_ACTIVE_WINDOW) { DBG("A_NET_ACTIVE_WINDOW\n"); fb_ev_trigger(fbev, EV_ACTIVE_WINDOW); } else if (at == a_NET_CLIENT_LIST_STACKING) { DBG("A_NET_CLIENT_LIST_STACKING\n"); fb_ev_trigger(fbev, EV_CLIENT_LIST_STACKING); } else if (at == a_NET_WORKAREA) { DBG("A_NET_WORKAREA\n"); //p->workarea = get_xaproperty (GDK_ROOT_WINDOW(), a_NET_WORKAREA, // XA_CARDINAL, &p->wa_len); //print_wmdata(p); } else if (at == a_XROOTPMAP_ID) { if (p->transparent) fb_bg_notify_changed_bg(p->bg); } else if (at == a_NET_DESKTOP_GEOMETRY) { DBG("a_NET_DESKTOP_GEOMETRY\n"); gtk_main_quit(); } else RET(GDK_FILTER_CONTINUE); RET(GDK_FILTER_REMOVE); } DBG("non root %lx\n", win); RET(GDK_FILTER_CONTINUE); }
static gboolean panel_configure_event(GtkWidget *widget, GdkEventConfigure *e, panel *p) { ENTER; DBG("cur geom: %dx%d+%d+%d\n", e->width, e->height, e->x, e->y); DBG("req geom: %dx%d+%d+%d\n", p->aw, p->ah, p->ax, p->ay); if (e->width == p->cw && e->height == p->ch && e->x == p->cx && e->y == p->cy) { DBG("dup. exiting\n"); RET(FALSE); } /* save current geometry */ p->cw = e->width; p->ch = e->height; p->cx = e->x; p->cy = e->y; /* if panel size is not what we have requested, just wait, it will */ if (e->width != p->aw || e->height != p->ah) { DBG("size_req not yet ready. exiting\n"); RET(FALSE); } /* if panel wasn't at requested position, then send another request */ if (e->x != p->ax || e->y != p->ay) { DBG("move %d,%d\n", p->ax, p->ay); gtk_window_move(GTK_WINDOW(widget), p->ax, p->ay); RET(FALSE); } /* panel is at right place, lets go on */ DBG("panel is at right place, lets go on\n"); if (p->transparent) { DBG("remake bg image\n"); fb_bg_notify_changed_bg(p->bg); } if (p->setstrut) { DBG("set_wm_strut\n"); panel_set_wm_strut(p); } if (p->round_corners) { DBG("make_round_corners\n"); make_round_corners(p); } gtk_widget_show(p->topgwin); if (p->setstrut) { DBG("set_wm_strut\n"); panel_set_wm_strut(p); } RET(FALSE); }
static gboolean panel_configure_event (GtkWidget *widget, GdkEventConfigure *e, panel *p) { ENTER; if (e->width == p->cw && e->height == p->ch && e->x == p->cx && e->y == p->cy) RET(TRUE); p->cw = e->width; p->ch = e->height; p->cx = e->x; p->cy = e->y; DBG("here\n"); if (p->transparent) fb_bg_notify_changed_bg(p->bg); DBG("here\n"); DBG("geom: size (%d, %d). pos (%d, %d)\n", e->width, e->height, e->x, e->y); RET(FALSE); }