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); }
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(); }