Exemplo n.º 1
0
ObPopup *popup_new(void)
{
    XSetWindowAttributes attrib;
    ObPopup *self = g_slice_new0(ObPopup);

    self->obwin.type = OB_WINDOW_CLASS_INTERNAL;
    self->gravity = NorthWestGravity;
    self->x = self->y = self->textw = self->h = 0;
    self->a_bg = RrAppearanceCopy(ob_rr_theme->osd_bg);
    self->a_text = RrAppearanceCopy(ob_rr_theme->osd_hilite_label);
    self->iconwm = self->iconhm = 1;

    attrib.override_redirect = True;
    self->bg = XCreateWindow(obt_display, obt_root(ob_screen),
                             0, 0, 1, 1, 0, RrDepth(ob_rr_inst),
                             InputOutput, RrVisual(ob_rr_inst),
                             CWOverrideRedirect, &attrib);

    self->text = XCreateWindow(obt_display, self->bg,
                               0, 0, 1, 1, 0, RrDepth(ob_rr_inst),
                               InputOutput, RrVisual(ob_rr_inst), 0, NULL);

    XSetWindowBorderWidth(obt_display, self->bg, ob_rr_theme->obwidth);
    XSetWindowBorder(obt_display, self->bg,
                     RrColorPixel(ob_rr_theme->osd_border_color));

    XMapWindow(obt_display, self->text);

    stacking_add(INTERNAL_AS_WINDOW(self));
    window_add(&self->bg, INTERNAL_AS_WINDOW(self));
    return self;
}
Exemplo n.º 2
0
ObMenuFrame* menu_frame_new(ObMenu *menu, guint show_from, ObClient *client)
{
    ObMenuFrame *self;
    XSetWindowAttributes attr;

    self = g_slice_new0(ObMenuFrame);
    self->obwin.type = OB_WINDOW_CLASS_MENUFRAME;
    self->menu = menu;
    self->selected = NULL;
    self->client = client;
    self->direction_right = TRUE;
    self->show_from = show_from;

    attr.event_mask = FRAME_EVENTMASK;
    self->window = createWindow(obt_root(ob_screen),
                                CWEventMask, &attr);

    /* make it a popup menu type window */
    OBT_PROP_SET32(self->window, NET_WM_WINDOW_TYPE, ATOM,
                   OBT_PROP_ATOM(NET_WM_WINDOW_TYPE_POPUP_MENU));

    XSetWindowBorderWidth(obt_display, self->window, ob_rr_theme->mbwidth);
    XSetWindowBorder(obt_display, self->window,
                     RrColorPixel(ob_rr_theme->menu_border_color));

    self->a_items = RrAppearanceCopy(ob_rr_theme->a_menu);

    window_add(&self->window, MENUFRAME_AS_WINDOW(self));
    stacking_add(MENUFRAME_AS_WINDOW(self));

    return self;
}
Exemplo n.º 3
0
void stacking_add_nonintrusive(struct wm_window *win)
{
	struct wm_client *client;
	GList *it_below = NULL;
	GList *it_above;
	GList *wins;
	if(!WINDOW_IS_CLIENT(win)) {
		stacking_add(win);
		return;
	}
	client = WINDOW_AS_CLIENT(win);
	g_assert(client->managed);
	it_below = find_highest_relative(client);
	if(!it_below) {
		if(focus_client && client != focus_client && focus_client->layer == client->layer) {
			it_below = g_list_find(stacking_list, focus_client);
			it_below = g_list_next(it_below);
		} else {
			it_below = stacking_list;
		}
	}
	for(; it_below; it_below = g_list_next(it_below)) {
		if(client->layer >= window_layer(it_below->data))
			break;
	}
	for(; it_below != stacking_list; it_below = it_above) {
		it_above = it_below ? g_list_previous(it_below) : g_list_last(stacking_list);
		if(client->layer <= window_layer(it_above->data))
			break;
	}
	wins = g_list_append(NULL, win);
	do_restack(wins, it_below);
	g_list_free(wins);
	stacking_list_tail = g_list_last(stacking_list);
}