static GdkFilterReturn _event_configure_notify(Panel * panel) { GdkRectangle rect; _panel_reset(panel, &rect); if(panel->top != NULL) panel_window_reset(panel->top, PANEL_POSITION_TOP, &rect); if(panel->bottom != NULL) panel_window_reset(panel->bottom, PANEL_POSITION_BOTTOM, &rect); return GDK_FILTER_CONTINUE; }
/* panel_window_new */ PanelWindow * panel_window_new(PanelAppletHelper * helper, PanelWindowType type, PanelWindowPosition position, GtkIconSize iconsize, GdkRectangle * root) { PanelWindow * panel; int icon_width; int icon_height; GtkOrientation orientation; if(gtk_icon_size_lookup(iconsize, &icon_width, &icon_height) != TRUE) { error_set_code(1, _("Invalid panel size")); return NULL; } if((panel = object_new(sizeof(*panel))) == NULL) return NULL; panel->type = type; panel->position = position; panel->iconsize = iconsize; panel->helper = helper; panel->applets = NULL; panel->applets_cnt = 0; if(position != PANEL_WINDOW_POSITION_EMBEDDED) { panel->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); #if GTK_CHECK_VERSION(3, 0, 0) && !GTK_CHECK_VERSION(3, 14, 0) gtk_window_set_has_resize_grip(GTK_WINDOW(panel->window), FALSE); #endif } else { panel->window = gtk_plug_new(0); gtk_widget_show(panel->window); } gtk_container_set_border_width(GTK_CONTAINER(panel->window), 2); panel->height = icon_height + (PANEL_BORDER_WIDTH * 4); #ifdef DEBUG fprintf(stderr, "DEBUG: %s() %u height=%d\n", __func__, position, panel->height); #endif panel->box = NULL; orientation = panel_window_get_orientation(panel); #if GTK_CHECK_VERSION(3, 0, 0) panel->box = gtk_box_new(orientation, 2); #else panel->box = (orientation == GTK_ORIENTATION_HORIZONTAL) ? gtk_hbox_new(FALSE, 2) : gtk_vbox_new(FALSE, 2); #endif switch(position) { case PANEL_WINDOW_POSITION_TOP: case PANEL_WINDOW_POSITION_BOTTOM: #if GTK_CHECK_VERSION(2, 6, 0) gtk_window_set_focus_on_map(GTK_WINDOW(panel->window), FALSE); #endif gtk_window_set_type_hint(GTK_WINDOW(panel->window), GDK_WINDOW_TYPE_HINT_DOCK); gtk_window_stick(GTK_WINDOW(panel->window)); g_signal_connect(panel->window, "configure-event", G_CALLBACK(_panel_window_on_configure_event), panel); break; case PANEL_WINDOW_POSITION_LEFT: case PANEL_WINDOW_POSITION_RIGHT: #if GTK_CHECK_VERSION(2, 6, 0) gtk_window_set_focus_on_map(GTK_WINDOW(panel->window), FALSE); #endif gtk_window_set_type_hint(GTK_WINDOW(panel->window), GDK_WINDOW_TYPE_HINT_DOCK); gtk_window_stick(GTK_WINDOW(panel->window)); g_signal_connect(panel->window, "configure-event", G_CALLBACK(_panel_window_on_configure_event), panel); break; case PANEL_WINDOW_POSITION_CENTER: gtk_window_set_position(GTK_WINDOW(panel->window), GTK_WIN_POS_CENTER_ALWAYS); gtk_window_stick(GTK_WINDOW(panel->window)); /* fallback */ case PANEL_WINDOW_POSITION_FLOATING: gtk_window_set_accept_focus(GTK_WINDOW(panel->window), FALSE); gtk_window_set_decorated(GTK_WINDOW(panel->window), FALSE); case PANEL_WINDOW_POSITION_EMBEDDED: case PANEL_WINDOW_POSITION_MANAGED: break; } g_signal_connect_swapped(panel->window, "delete-event", G_CALLBACK( _panel_window_on_closex), panel); gtk_container_add(GTK_CONTAINER(panel->window), panel->box); gtk_widget_show_all(panel->box); panel_window_reset(panel, root); return panel; }