コード例 #1
0
ファイル: pointer.c プロジェクト: gyroninja/bspwm
void window_grab_buttons(xcb_window_t win)
{
	for (unsigned int i = 0; i < LENGTH(BUTTONS); i++) {
		if (click_to_focus == (int8_t) XCB_BUTTON_INDEX_ANY || click_to_focus == (int8_t) BUTTONS[i]) {
			window_grab_button(win, BUTTONS[i], XCB_NONE);
		}
		if (pointer_actions[i] != ACTION_NONE) {
			window_grab_button(win, BUTTONS[i], pointer_modifier);
		}
	}
}
コード例 #2
0
ファイル: pointer.c プロジェクト: gatulezal/bspwm
void window_grab_buttons(xcb_window_t win)
{
	if (click_to_focus) {
		window_grab_button(win, XCB_BUTTON_INDEX_1, XCB_NONE);
	}
	uint8_t buttons[] = {XCB_BUTTON_INDEX_1, XCB_BUTTON_INDEX_2, XCB_BUTTON_INDEX_3};
	for (unsigned int i = 0; i < LENGTH(buttons); i++) {
		if (pointer_actions[i] != ACTION_NONE) {
			window_grab_button(win, buttons[i], pointer_modifier);
		}
	}
}
コード例 #3
0
ファイル: clientlist.c プロジェクト: kcirick/fusionwm
Client* manage_client(Window win) {
   if (get_client_from_window(win)) return NULL;

   // init client
   Client* client = create_client();
   Monitor* m = get_current_monitor();
   // set to window properties
   client->window = win;
   client_update_title(client);

   // apply rules
   int manage = 1;
   rules_apply(client, &manage);
   if (!manage) {
      destroy_client(client);
      // map it... just to be sure
      XMapWindow(gDisplay, win);
      return NULL;
   }

   unsigned int border, depth;
   Window root_win;
   int x, y;
   unsigned int w, h;
   XGetGeometry(gDisplay, win, &root_win, &x, &y, &w, &h, &border, &depth);
   // treat wanted coordinates as floating coords
   XRectangle size = client->float_size;
   size.width = w;
   size.height = h;
   size.x = m->rect.x + m->rect.width/2 - size.width/2;
   size.y = m->rect.y + m->rect.height/2 - size.height/2 + bar_height;
   client->float_size = size;
   client->last_size = size;
   XMoveResizeWindow(gDisplay, client->window, size.x, size.y, size.width, size.height);

   // actually manage it
   g_array_append_val(g_clients, client);
   XSetWindowBorderWidth(gDisplay, win, window_border_width);
   // insert to layout
   if (!client->tag)   client->tag = m->tag;

   // get events from window
   client_update_wm_hints(client);
   XSelectInput(gDisplay, win, CLIENT_EVENT_MASK);
   window_grab_button(win);
   frame_insert_window(client->tag->frame, win);
   monitor_apply_layout(find_monitor_with_tag(client->tag));

   return client;
}
コード例 #4
0
ファイル: clientlist.c プロジェクト: kcirick/fusionwm
void window_unfocus(Window window) {
    // grab buttons in old window again
    XSetWindowBorder(gDisplay, window, wincolors[0][ColWindowBorder]);
    window_grab_button(window);
}