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 void clicked( GtkWidget *widget, gpointer data) { int desknum = get_net_current_desktop(); int desks = get_net_number_of_desktops(); int newdesk; ENTER; if(desknum == (desks - 1)) newdesk = 0; else newdesk = desknum + 1; g_assert(data != NULL); Xclimsg(GDK_ROOT_WINDOW(), a_NET_CURRENT_DESKTOP, newdesk, 0, 0, 0, 0); RET(); }
static void pager_rebuild_all(FbEv *ev, pager_priv *pg) { int desknum, dif, i; int curdesk G_GNUC_UNUSED; ENTER; desknum = pg->desknum; curdesk = pg->curdesk; pg->desknum = get_net_number_of_desktops(); if (pg->desknum < 1) pg->desknum = 1; else if (pg->desknum > MAX_DESK_NUM) { pg->desknum = MAX_DESK_NUM; ERR("pager: max number of supported desks is %d\n", MAX_DESK_NUM); } pg->curdesk = get_net_current_desktop(); if (pg->curdesk >= pg->desknum) pg->curdesk = 0; DBG("desknum=%d curdesk=%d\n", desknum, curdesk); DBG("pg->desknum=%d pg->curdesk=%d\n", pg->desknum, pg->curdesk); dif = pg->desknum - desknum; if (dif == 0) RET(); if (dif < 0) { /* if desktops were deleted then delete their maps also */ for (i = pg->desknum; i < desknum; i++) desk_free(pg, i); } else { for (i = desknum; i < pg->desknum; i++) desk_new(pg, i); } g_hash_table_foreach_remove(pg->htable, (GHRFunc) task_remove_all, (gpointer)pg); do_net_current_desktop(NULL, pg); do_net_client_list_stacking(NULL, pg); RET(); }
/* Handler for "number-of-desktops" event from root window listener. * Also used to initialize plugin. */ static void pager_net_number_of_desktops(FbEv * ev, PagerPlugin * pg) { /* Get existing values. */ int number_of_desktops = pg->number_of_desktops; /* Get the correct number of desktops. */ pg->number_of_desktops = get_net_number_of_desktops(); if (pg->number_of_desktops < 1) pg->number_of_desktops = 1; /* Reallocate the structure if necessary. */ if (pg->number_of_desktops > pg->desk_extent) { PagerDesk * * new_desks = g_new(PagerDesk *, pg->number_of_desktops); if (pg->desks != NULL) { memcpy(new_desks, pg->desks, pg->desk_extent * sizeof(PagerDesk *)); g_free(pg->desks); } pg->desks = new_desks; pg->desk_extent = pg->number_of_desktops; }
static void pager_rebuild_all(FbEv *ev, pager *pg) { int desknum, curdesk, dif, i; ENTER; desknum = pg->desknum; curdesk = pg->curdesk; pg->desknum = get_net_number_of_desktops(); if (pg->desknum < 1) pg->desknum = 1; else if (pg->desknum > MAX_DESK_NUM) { pg->desknum = MAX_DESK_NUM; ERR("pager: max number of supported desks is %d\n", MAX_DESK_NUM); } pg->curdesk = get_net_current_desktop(); if (pg->curdesk >= pg->desknum) pg->curdesk = 0; DBG("desknum=%d curdesk=%d\n", desknum, curdesk); DBG("pg->desknum=%d pg->curdesk=%d\n", pg->desknum, pg->curdesk); dif = pg->desknum - desknum; if (dif == 0) RET(); if (dif < 0) { /* if desktops were deleted then delete their maps also */ for (i = pg->desknum; i < desknum; i++) desk_free(pg, i); } else { for (i = desknum; i < pg->desknum; i++) desk_new(pg, i); } do_net_client_list_stacking(NULL, pg); RET(); }
static int panel_parse_global(panel *p, FILE *fp) { line s; s.len = 256; ENTER; while (get_line(fp, &s) != LINE_NONE) { if (s.type == LINE_VAR) { if (!g_ascii_strcasecmp(s.t[0], "edge")) { p->edge = str2num(edge_pair, s.t[1], EDGE_NONE); } else if (!g_ascii_strcasecmp(s.t[0], "allign")) { p->allign = str2num(allign_pair, s.t[1], ALLIGN_NONE); } else if (!g_ascii_strcasecmp(s.t[0], "margin")) { p->margin = atoi(s.t[1]); } else if (!g_ascii_strcasecmp(s.t[0], "widthtype")) { p->widthtype = str2num(width_pair, s.t[1], WIDTH_NONE); } else if (!g_ascii_strcasecmp(s.t[0], "width")) { p->width = atoi(s.t[1]); } else if (!g_ascii_strcasecmp(s.t[0], "heighttype")) { p->heighttype = str2num(height_pair, s.t[1], HEIGHT_NONE); } else if (!g_ascii_strcasecmp(s.t[0], "height")) { p->height = atoi(s.t[1]); } else if (!g_ascii_strcasecmp(s.t[0], "spacing")) { p->spacing = atoi(s.t[1]); } else if (!g_ascii_strcasecmp(s.t[0], "SetDockType")) { p->setdocktype = str2num(bool_pair, s.t[1], 0); } else if (!g_ascii_strcasecmp(s.t[0], "SetPartialStrut")) { p->setstrut = str2num(bool_pair, s.t[1], 0); } else if (!g_ascii_strcasecmp(s.t[0], "RoundCorners")) { p->round_corners = str2num(bool_pair, s.t[1], 0); } else if (!g_ascii_strcasecmp(s.t[0], "Transparent")) { p->transparent = str2num(bool_pair, s.t[1], 0); } else if (!g_ascii_strcasecmp(s.t[0], "Alpha")) { p->alpha = atoi(s.t[1]); if (p->alpha > 255) p->alpha = 255; } else if (!g_ascii_strcasecmp(s.t[0], "TintColor")) { if (!gdk_color_parse (s.t[1], &p->gtintcolor)) gdk_color_parse ("white", &p->gtintcolor); p->tintcolor = gcolor2rgb24(&p->gtintcolor); DBG("tintcolor=%x\n", p->tintcolor); } else { ERR( "fbpanel: %s - unknown var in Global section\n", s.t[0]); RET(0); } } else if (s.type == LINE_BLOCK_END) { break; } else { ERR( "fbpanel: illegal in this context %s\n", s.str); RET(0); } } p->orientation = (p->edge == EDGE_TOP || p->edge == EDGE_BOTTOM) ? ORIENT_HORIZ : ORIENT_VERT; if (p->orientation == ORIENT_HORIZ) { p->my_box_new = gtk_hbox_new; p->my_separator_new = gtk_vseparator_new; } else { p->my_box_new = gtk_vbox_new; p->my_separator_new = gtk_hseparator_new; } if (p->width < 0) p->width = 100; if (p->widthtype == WIDTH_PERCENT && p->width > 100) p->width = 100; p->heighttype = HEIGHT_PIXEL; if (p->heighttype == HEIGHT_PIXEL) { if (p->height < PANEL_HEIGHT_MIN) p->height = PANEL_HEIGHT_MIN; else if (p->height > PANEL_HEIGHT_MAX) p->height = PANEL_HEIGHT_MAX; } p->curdesk = get_net_current_desktop(); p->desknum = get_net_number_of_desktops(); p->workarea = get_xaproperty (GDK_ROOT_WINDOW(), a_NET_WORKAREA, XA_CARDINAL, &p->wa_len); print_wmdata(p); panel_start_gui(p); RET(1); }
static GdkFilterReturn panel_event_filter(GdkXEvent *xevent, GdkEvent *event, gpointer not_used) { Atom at; Window win; XEvent *ev = (XEvent *) xevent; ENTER; DBG("win = 0x%x\n", ev->xproperty.window); if (ev->type != PropertyNotify ) { /* private client message from lxpanelctl */ if( ev->type == ClientMessage && ev->xproperty.atom == a_LXPANEL_CMD ) { process_client_msg( (XClientMessageEvent*)ev ); } else if( ev->type == DestroyNotify ) { fb_ev_emit_destroy( fbev, ((XDestroyWindowEvent*)ev)->window ); } RET(GDK_FILTER_CONTINUE); } at = ev->xproperty.atom; win = ev->xproperty.window; if (win == GDK_ROOT_WINDOW()) { if (at == a_NET_CLIENT_LIST) { fb_ev_emit(fbev, EV_CLIENT_LIST); } else if (at == a_NET_CURRENT_DESKTOP) { GSList* l; for( l = all_panels; l; l = l->next ) ((LXPanel*)l->data)->priv->curdesk = get_net_current_desktop(); fb_ev_emit(fbev, EV_CURRENT_DESKTOP); } else if (at == a_NET_NUMBER_OF_DESKTOPS) { GSList* l; for( l = all_panels; l; l = l->next ) ((LXPanel*)l->data)->priv->desknum = get_net_number_of_desktops(); fb_ev_emit(fbev, EV_NUMBER_OF_DESKTOPS); } else if (at == a_NET_DESKTOP_NAMES) { fb_ev_emit(fbev, EV_DESKTOP_NAMES); } else if (at == a_NET_ACTIVE_WINDOW) { fb_ev_emit(fbev, EV_ACTIVE_WINDOW ); } else if (at == a_NET_CLIENT_LIST_STACKING) { fb_ev_emit(fbev, EV_CLIENT_LIST_STACKING); } else if (at == a_XROOTPMAP_ID) { GSList* l; for( l = all_panels; l; l = l->next ) _panel_queue_update_background((LXPanel*)l->data); } else return GDK_FILTER_CONTINUE; return GDK_FILTER_REMOVE; } return GDK_FILTER_CONTINUE; }
static int panel_parse_global(xconf *xc) { ENTER; /* Set default values */ p->allign = ALLIGN_CENTER; p->edge = EDGE_BOTTOM; p->widthtype = WIDTH_PERCENT; p->width = 100; p->heighttype = HEIGHT_PIXEL; p->height = PANEL_HEIGHT_DEFAULT; p->max_elem_height = PANEL_HEIGHT_MAX; p->setdocktype = 1; p->setstrut = 1; p->round_corners = 1; p->round_corners_radius = 7; p->autohide = 0; p->height_when_hidden = 2; p->transparent = 0; p->alpha = 127; p->tintcolor_name = "white"; p->spacing = 0; p->setlayer = FALSE; p->layer = LAYER_ABOVE; /* Read config */ /* geometry */ XCG(xc, "edge", &p->edge, enum, edge_enum); XCG(xc, "allign", &p->allign, enum, allign_enum); XCG(xc, "widthtype", &p->widthtype, enum, widthtype_enum); XCG(xc, "heighttype", &p->heighttype, enum, heighttype_enum); XCG(xc, "width", &p->width, int); XCG(xc, "height", &p->height, int); XCG(xc, "margin", &p->margin, int); /* properties */ XCG(xc, "setdocktype", &p->setdocktype, enum, bool_enum); XCG(xc, "setpartialstrut", &p->setstrut, enum, bool_enum); XCG(xc, "autohide", &p->autohide, enum, bool_enum); XCG(xc, "heightwhenhidden", &p->height_when_hidden, int); XCG(xc, "setlayer", &p->setlayer, enum, bool_enum); XCG(xc, "layer", &p->layer, enum, layer_enum); /* effects */ XCG(xc, "roundcorners", &p->round_corners, enum, bool_enum); XCG(xc, "roundcornersradius", &p->round_corners_radius, int); XCG(xc, "transparent", &p->transparent, enum, bool_enum); XCG(xc, "alpha", &p->alpha, int); XCG(xc, "tintcolor", &p->tintcolor_name, str); XCG(xc, "maxelemheight", &p->max_elem_height, int); /* Sanity checks */ if (!gdk_color_parse(p->tintcolor_name, &p->gtintcolor)) gdk_color_parse("white", &p->gtintcolor); p->tintcolor = gcolor2rgb24(&p->gtintcolor); DBG("tintcolor=%x\n", p->tintcolor); if (p->alpha > 255) p->alpha = 255; p->orientation = (p->edge == EDGE_TOP || p->edge == EDGE_BOTTOM) ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; if (p->orientation == GTK_ORIENTATION_HORIZONTAL) { p->my_box_new = gtk_hbox_new; p->my_separator_new = gtk_vseparator_new; } else { p->my_box_new = gtk_vbox_new; p->my_separator_new = gtk_hseparator_new; } if (p->width < 0) p->width = 100; if (p->widthtype == WIDTH_PERCENT && p->width > 100) p->width = 100; p->heighttype = HEIGHT_PIXEL; if (p->heighttype == HEIGHT_PIXEL) { if (p->height < PANEL_HEIGHT_MIN) p->height = PANEL_HEIGHT_MIN; else if (p->height > PANEL_HEIGHT_MAX) p->height = PANEL_HEIGHT_MAX; } if (p->max_elem_height > p->height || p->max_elem_height < PANEL_HEIGHT_MIN) p->max_elem_height = p->height; p->curdesk = get_net_current_desktop(); p->desknum = get_net_number_of_desktops(); //p->workarea = get_xaproperty (GDK_ROOT_WINDOW(), a_NET_WORKAREA, // XA_CARDINAL, &p->wa_len); //print_wmdata(p); panel_start_gui(p); RET(1); }