static int pager_constructor(plugin_instance *plug) { pager_priv *pg; ENTER; pg = (pager_priv *) plug; #ifdef EXTRA_DEBUG cp = pg; signal(SIGUSR2, sig_usr); #endif pg->htable = g_hash_table_new (g_int_hash, g_int_equal); pg->box = plug->panel->my_box_new(TRUE, 1); gtk_container_set_border_width (GTK_CONTAINER (pg->box), 0); gtk_widget_show(pg->box); gtk_bgbox_set_background(plug->pwid, BG_STYLE, 0, 0); gtk_container_set_border_width (GTK_CONTAINER (plug->pwid), BORDER); gtk_container_add(GTK_CONTAINER(plug->pwid), pg->box); pg->ratio = (gfloat)gdk_screen_width() / (gfloat)gdk_screen_height(); if (plug->panel->orientation == GTK_ORIENTATION_HORIZONTAL) { pg->dah = plug->panel->ah - 2 * BORDER; pg->daw = (gfloat) pg->dah * pg->ratio; } else { pg->daw = plug->panel->aw - 2 * BORDER; pg->dah = (gfloat) pg->daw / pg->ratio; } pg->wallpaper = 1; //pg->scaley = (gfloat)pg->dh / (gfloat)gdk_screen_height(); //pg->scalex = (gfloat)pg->dw / (gfloat)gdk_screen_width(); XCG(plug->xc, "showwallpaper", &pg->wallpaper, enum, bool_enum); if (pg->wallpaper) { pg->fbbg = fb_bg_get_for_display(); DBG("get fbbg %p\n", pg->fbbg); g_signal_connect(G_OBJECT(pg->fbbg), "changed", G_CALLBACK(pager_bg_changed), pg); } pager_rebuild_all(fbev, pg); gdk_window_add_filter(NULL, (GdkFilterFunc)pager_event_filter, pg ); g_signal_connect (G_OBJECT (fbev), "current_desktop", G_CALLBACK (do_net_current_desktop), (gpointer) pg); g_signal_connect (G_OBJECT (fbev), "active_window", G_CALLBACK (do_net_active_window), (gpointer) pg); g_signal_connect (G_OBJECT (fbev), "number_of_desktops", G_CALLBACK (pager_rebuild_all), (gpointer) pg); g_signal_connect (G_OBJECT (fbev), "client_list_stacking", G_CALLBACK (do_net_client_list_stacking), (gpointer) pg); RET(1); }
static int pager_constructor(plugin *plug) { pager *pg; ENTER; pg = g_new0(pager, 1); g_return_val_if_fail(pg != NULL, 0); plug->priv = pg; pg->htable = g_hash_table_new (g_int_hash, g_int_equal); pg->box = plug->panel->my_box_new(TRUE, 1); gtk_container_set_border_width (GTK_CONTAINER (pg->box), 0); gtk_widget_show(pg->box); gtk_bgbox_set_background(plug->pwid, BG_STYLE, 0, 0); gtk_container_set_border_width (GTK_CONTAINER (plug->pwid), 1); gtk_container_add(GTK_CONTAINER(plug->pwid), pg->box); pg->eb = pg->box; pg->ratio = (gfloat)gdk_screen_width() / (gfloat)gdk_screen_height(); pg->scaley = (gfloat)pg->dh / (gfloat)gdk_screen_height(); pg->scalex = (gfloat)pg->dw / (gfloat)gdk_screen_width(); pager_rebuild_all(fbev, pg); //do_net_current_desktop(fbev, pg); //do_net_client_list_stacking(fbev, pg); gdk_window_add_filter(NULL, (GdkFilterFunc)pager_event_filter, pg ); g_signal_connect (G_OBJECT (fbev), "current_desktop", G_CALLBACK (do_net_current_desktop), (gpointer) pg); g_signal_connect (G_OBJECT (fbev), "active_window", G_CALLBACK (do_net_active_window), (gpointer) pg); g_signal_connect (G_OBJECT (fbev), "number_of_desktops", G_CALLBACK (pager_rebuild_all), (gpointer) pg); g_signal_connect (G_OBJECT (fbev), "client_list_stacking", G_CALLBACK (do_net_client_list_stacking), (gpointer) pg); RET(1); }
static void make_button(plugin_instance *p, xconf *xc) { int w, h; menu_priv *m; gchar *fname, *iname; ENTER; m = (menu_priv *) p; /* XXX: this code is duplicated in every plugin. * Lets run it once in a panel */ if (p->panel->orientation == GTK_ORIENTATION_HORIZONTAL) { w = -1; h = p->panel->max_elem_height; } else { w = p->panel->max_elem_height; h = -1; } fname = iname = NULL; XCG(xc, "image", &fname, str); fname = expand_tilda(fname); XCG(xc, "icon", &iname, str); if (fname || iname) { m->bg = fb_button_new(iname, fname, w, h, 0x702020, NULL); gtk_container_add(GTK_CONTAINER(p->pwid), m->bg); if (p->panel->transparent) gtk_bgbox_set_background(m->bg, BG_INHERIT, 0, 0); g_signal_connect (G_OBJECT (m->bg), "button-press-event", G_CALLBACK (my_button_pressed), p); } g_free(fname); }
void panel_start_gui(panel *p) { Atom state[3]; XWMHints wmhints; guint32 val; ENTER; // main toplevel window p->topgwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(p->topgwin), 0); gtk_window_set_resizable(GTK_WINDOW(p->topgwin), FALSE); gtk_window_set_wmclass(GTK_WINDOW(p->topgwin), "panel", "fbpanel"); gtk_window_set_title(GTK_WINDOW(p->topgwin), "panel"); gtk_window_set_position(GTK_WINDOW(p->topgwin), GTK_WIN_POS_NONE); gtk_window_set_decorated(GTK_WINDOW(p->topgwin), FALSE); g_signal_connect(G_OBJECT(p->topgwin), "delete-event", G_CALLBACK(panel_delete_event), p); g_signal_connect(G_OBJECT(p->topgwin), "destroy-event", G_CALLBACK(panel_destroy_event), p); g_signal_connect (G_OBJECT (p->topgwin), "size-request", (GCallback) panel_size_req, p); g_signal_connect (G_OBJECT (p->topgwin), "size-allocate", (GCallback) panel_size_alloc, p); g_signal_connect (G_OBJECT (p->topgwin), "configure-event", (GCallback) panel_configure_event, p); g_signal_connect (G_OBJECT (p->topgwin), "realize", (GCallback) panel_realize, p); g_signal_connect (G_OBJECT (p->topgwin), "style-set", (GCallback) panel_style_set, p); gtk_widget_realize(p->topgwin); //gdk_window_set_decorations(p->topgwin->window, 0); gtk_widget_set_app_paintable(p->topgwin, TRUE); // background box all over toplevel p->bbox = gtk_bgbox_new(); gtk_container_add(GTK_CONTAINER(p->topgwin), p->bbox); gtk_widget_show(p->bbox); gtk_container_set_border_width(GTK_CONTAINER(p->bbox), 0); if (p->transparent) { p->bg = fb_bg_get_for_display(); gtk_bgbox_set_background(p->bbox, BG_ROOT, p->tintcolor, p->alpha); } // main layout manager as a single child of background widget box p->lbox = p->my_box_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(p->lbox), 0); gtk_container_add(GTK_CONTAINER(p->bbox), p->lbox); gtk_widget_show(p->lbox); if (p->round_corners) make_round_corners(p); p->box = p->my_box_new(FALSE, p->spacing); gtk_container_set_border_width(GTK_CONTAINER(p->box), 0); gtk_box_pack_start(GTK_BOX(p->lbox), p->box, TRUE, TRUE, 0); gtk_widget_show(p->box); p->topxwin = GDK_WINDOW_XWINDOW(GTK_WIDGET(p->topgwin)->window); DBG("topxwin = %x\n", p->topxwin); /* the settings that should be done before window is mapped */ wmhints.flags = InputHint; wmhints.input = 0; XSetWMHints (GDK_DISPLAY(), p->topxwin, &wmhints); #define WIN_HINTS_SKIP_FOCUS (1<<0) /* "alt-tab" skips this win */ val = WIN_HINTS_SKIP_FOCUS; XChangeProperty(GDK_DISPLAY(), p->topxwin, XInternAtom(GDK_DISPLAY(), "_WIN_HINTS", False), XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &val, 1); if (p->setdocktype) { state[0] = a_NET_WM_WINDOW_TYPE_DOCK; XChangeProperty(GDK_DISPLAY(), p->topxwin, a_NET_WM_WINDOW_TYPE, XA_ATOM, 32, PropModeReplace, (unsigned char *) state, 1); } /* window mapping point */ gtk_widget_show_all(p->topgwin); /* the settings that should be done after window is mapped */ /* send it to running wm */ Xclimsg(p->topxwin, a_NET_WM_DESKTOP, 0xFFFFFFFF, 0, 0, 0, 0); /* and assign it ourself just for case when wm is not running */ val = 0xFFFFFFFF; XChangeProperty(GDK_DISPLAY(), p->topxwin, a_NET_WM_DESKTOP, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &val, 1); state[0] = a_NET_WM_STATE_SKIP_PAGER; state[1] = a_NET_WM_STATE_SKIP_TASKBAR; state[2] = a_NET_WM_STATE_STICKY; XChangeProperty(GDK_DISPLAY(), p->topxwin, a_NET_WM_STATE, XA_ATOM, 32, PropModeReplace, (unsigned char *) state, 3); XSelectInput (GDK_DISPLAY(), GDK_ROOT_WINDOW(), PropertyChangeMask); gdk_window_add_filter(gdk_get_default_root_window (), (GdkFilterFunc)panel_event_filter, p); calculate_position(p); gdk_window_move_resize(p->topgwin->window, p->ax, p->ay, p->aw, p->ah); if (p->setstrut) panel_set_wm_strut(p); RET(); }
static void panel_start_gui(panel *p) { ENTER; // main toplevel window p->topgwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(p->topgwin), 0); g_signal_connect(G_OBJECT(p->topgwin), "destroy-event", (GCallback) panel_destroy_event, p); g_signal_connect(G_OBJECT(p->topgwin), "size-request", (GCallback) panel_size_req, p); g_signal_connect(G_OBJECT(p->topgwin), "map-event", (GCallback) panel_mapped, p); g_signal_connect(G_OBJECT(p->topgwin), "configure-event", (GCallback) panel_configure_event, p); g_signal_connect(G_OBJECT(p->topgwin), "button-press-event", (GCallback) panel_button_press_event, p); g_signal_connect(G_OBJECT(p->topgwin), "scroll-event", (GCallback) panel_scroll_event, p); gtk_window_set_resizable(GTK_WINDOW(p->topgwin), FALSE); gtk_window_set_wmclass(GTK_WINDOW(p->topgwin), "panel", "fbpanel"); gtk_window_set_title(GTK_WINDOW(p->topgwin), "panel"); gtk_window_set_position(GTK_WINDOW(p->topgwin), GTK_WIN_POS_NONE); gtk_window_set_decorated(GTK_WINDOW(p->topgwin), FALSE); gtk_window_set_accept_focus(GTK_WINDOW(p->topgwin), FALSE); if (p->setdocktype) gtk_window_set_type_hint(GTK_WINDOW(p->topgwin), GDK_WINDOW_TYPE_HINT_DOCK); if (p->layer == LAYER_ABOVE) gtk_window_set_keep_above(GTK_WINDOW(p->topgwin), TRUE); else if (p->layer == LAYER_BELOW) gtk_window_set_keep_below(GTK_WINDOW(p->topgwin), TRUE); gtk_window_stick(GTK_WINDOW(p->topgwin)); gtk_widget_realize(p->topgwin); p->topxwin = GDK_WINDOW_XWINDOW(p->topgwin->window); DBG("topxwin = %lx\n", p->topxwin); /* ensure configure event */ XMoveWindow(GDK_DISPLAY(), p->topxwin, 20, 20); XSync(GDK_DISPLAY(), False); gtk_widget_set_app_paintable(p->topgwin, TRUE); calculate_position(p); gtk_window_move(GTK_WINDOW(p->topgwin), p->ax, p->ay); gtk_window_resize(GTK_WINDOW(p->topgwin), p->aw, p->ah); DBG("move-resize x %d y %d w %d h %d\n", p->ax, p->ay, p->aw, p->ah); //XSync(GDK_DISPLAY(), False); //gdk_flush(); // background box all over toplevel p->bbox = gtk_bgbox_new(); gtk_container_add(GTK_CONTAINER(p->topgwin), p->bbox); gtk_container_set_border_width(GTK_CONTAINER(p->bbox), 0); if (p->transparent) { p->bg = fb_bg_get_for_display(); gtk_bgbox_set_background(p->bbox, BG_ROOT, p->tintcolor, p->alpha); } // main layout manager as a single child of background widget box p->lbox = p->my_box_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(p->lbox), 0); gtk_container_add(GTK_CONTAINER(p->bbox), p->lbox); p->box = p->my_box_new(FALSE, p->spacing); gtk_container_set_border_width(GTK_CONTAINER(p->box), 0); gtk_box_pack_start(GTK_BOX(p->lbox), p->box, TRUE, TRUE, (p->round_corners) ? p->round_corners_radius : 0); if (p->round_corners) { make_round_corners(p); DBG("make_round_corners\n"); } /* start window creation process */ gtk_widget_show_all(p->topgwin); /* .. and hide it from user until everything is done */ gtk_widget_hide(p->topgwin); p->menu = panel_make_menu(p); if (p->setstrut) panel_set_wm_strut(p); XSelectInput(GDK_DISPLAY(), GDK_ROOT_WINDOW(), PropertyChangeMask); gdk_window_add_filter(gdk_get_default_root_window(), (GdkFilterFunc)panel_event_filter, p); //XSync(GDK_DISPLAY(), False); gdk_flush(); RET(); }
static int wincmd_constructor(plugin *p) { line s; gchar *tooltip, *fname; wincmd *wc; //GdkPixbuf *gp, *gps; GtkWidget *button; int w, h; ENTER; s.len = 256; wc = g_new0(wincmd, 1); g_return_val_if_fail(wc != NULL, 0); wc->tips = gtk_tooltips_new(); p->priv = wc; tooltip = fname = 0; while (get_line(p->fp, &s) != LINE_BLOCK_END) { if (s.type == LINE_NONE) { ERR( "wincmd: illegal token %s\n", s.str); goto error; } if (s.type == LINE_VAR) { if (!g_ascii_strcasecmp(s.t[0], "Button1")) wc->button1 = str2num(wincmd_pair, s.t[1], WC_ICONIFY); else if (!g_ascii_strcasecmp(s.t[0], "Button2")) wc->button2 = str2num(wincmd_pair, s.t[1], WC_SHADE); else if (!g_ascii_strcasecmp(s.t[0], "tooltip")) tooltip = g_strdup(s.t[1]); else if (!g_ascii_strcasecmp(s.t[0], "image")) fname = expand_tilda(s.t[1]); else { ERR( "wincmd: unknown var %s\n", s.t[0]); goto error; } } else { ERR( "wincmd: illegal in this context %s\n", s.str); goto error; } } if (p->panel->orientation == ORIENT_HORIZ) { w = 10000; h = p->panel->ah; } else { w = p->panel->aw; h = 10000; } button = fb_button_new_from_file(fname, w, h, 0x202020, TRUE); gtk_container_set_border_width(GTK_CONTAINER(button), 0); g_signal_connect(G_OBJECT(button), "button_press_event", G_CALLBACK(clicked), (gpointer)wc); gtk_widget_show(button); gtk_container_add(GTK_CONTAINER(p->pwid), button); if (p->panel->transparent) gtk_bgbox_set_background(button, BG_ROOT, p->panel->tintcolor, p->panel->alpha); g_free(fname); if (tooltip) { gtk_tooltips_set_tip(GTK_TOOLTIPS (wc->tips), button, tooltip, NULL); g_free(tooltip); } RET(1); error: g_free(fname); g_free(tooltip); wincmd_destructor(p); ERR( "%s - exit\n", __FUNCTION__); RET(0); }