Exemple #1
0
bool ActiveWindow::DeShade() {
    if (!init()) {
        return false;
    }

    static Atom shade = XInternAtom(disp, "_NET_WM_STATE_SHADED", False);
    if (!set_window_state(disp, *win, shade, 0, false)) {
        ERROR("couldn't deshade");
        return false;
    }
    return true;
}
Exemple #2
0
bool ActiveWindow::DeFullscreen() {
    if (!init()) {
        return false;
    }

    static Atom fs = XInternAtom(disp, "_NET_WM_STATE_FULLSCREEN", False);
    if (!set_window_state(disp, *win, fs, 0, false)) {
        ERROR("couldn't defullscreen");
        return false;
    }
    return true;
}
Exemple #3
0
void unmanage_window(xcb_window_t win)
{
	coordinates_t loc;
	if (locate_window(win, &loc)) {
		put_status(SBSC_MASK_NODE_UNMANAGE, "node_unmanage 0x%08X 0x%08X 0x%08X\n", loc.monitor->id, loc.desktop->id, win);
		remove_node(loc.monitor, loc.desktop, loc.node);
		set_window_state(win, XCB_ICCCM_WM_STATE_WITHDRAWN);
		arrange(loc.monitor, loc.desktop);
	} else {
		for (pending_rule_t *pr = pending_rule_head; pr != NULL; pr = pr->next) {
			if (pr->win == win) {
				remove_pending_rule(pr);
				return;
			}
		}
	}
}
Portal::Portal() :
   QMainWindow(),
   m_workspace(NULL),
   m_open_mapper(NULL),
   m_history_mapper(NULL),
   m_activation_mapper(NULL),
   m_properties_mapper(NULL),
   m_filehist_menu(NULL),
   m_file_menu(NULL),
   m_window_menu(NULL),
   m_help_menu(NULL),
   m_file_toolbar(NULL),
   m_render_toolbar(NULL),
   m_open_action(NULL),
   m_help_action(NULL),
   m_exit_action(NULL),
   m_tile_action(NULL),
   m_cascade_action(NULL),
   m_close_action(NULL),
   m_flat_action(NULL),
   m_phong_action(NULL),
   m_wireframe_action(NULL),
   m_center_action(NULL),
   m_culling_action(NULL),
   m_texture_action(NULL),
   m_shading_actions(NULL),
   m_open_dialog(NULL),
   m_tool_docker(NULL),
   m_tool_tab(NULL),
   m_console(NULL),
   m_cout_buffer(NULL),
   m_cerr_buffer(NULL)
{
   m_workspace = new QWorkspace;
   m_workspace->setScrollBarsEnabled(true);

   connect( m_workspace, SIGNAL(windowActivated(QWidget*)),
	    this, SLOT(window_activated(QWidget*)) );

   connect( m_workspace, SIGNAL(windowActivated(QWidget*)),
	    this, SLOT(handle_glpad_propchange(QWidget*)) );

   this->setCentralWidget(m_workspace);

   m_open_mapper = new QSignalMapper(this);
   connect( m_open_mapper, SIGNAL(mapped(const QString &)),
	    this, SLOT(open(const QString &)));

   m_history_mapper = new QSignalMapper(this);
   connect( m_history_mapper, SIGNAL(mapped(const QString &)),
	    this, SLOT(update_history(const QString &)));

   m_activation_mapper = new QSignalMapper(this);
   connect( m_activation_mapper, SIGNAL(mapped(QWidget*)),
	    m_workspace, SLOT(setActiveWindow(QWidget*)) );

   m_properties_mapper = new QSignalMapper(this);
   connect( m_properties_mapper, SIGNAL(mapped(QWidget*)),
	    this, SLOT(handle_glpad_propchange(QWidget*)) );

   int isize = Config::main()->get( "icon::size" ).toInt();
   this->setIconSize( QSize( isize, isize ) );
   
   construct_actions();
   construct_menus();
   construct_toolbars();
   construct_dialogs();
   construct_dockers();
   construct_console();

   set_geometry();
   set_window_state();

   this->setWindowTitle( tr("Boxfish3d") );
   this->setWindowIcon( Svg_icon( ":/icons/boxfish3d.svg", QSize(32,32 ) ) );

   if( Config::main()->defined( "portal::state" ) ) {
      this->restoreState( Config::main()->get( "portal::state" ).toUtf8() );
   }

   int count = 0;
   QString fname;
   do {
      fname = Config::main()->get( QString("file::history::list::item") +
				   QString::number(count) );
      count++;

      if( !fname.isNull() ) 
	 m_file_history.push_back( fname );
            
   } while( !fname.isNull() );
}
Exemple #5
0
void manage_window(xcb_window_t win, rule_consequence_t *csq, int fd)
{
	monitor_t *m = mon;
	desktop_t *d = mon->desk;
	node_t *f = mon->desk->focus;

	parse_rule_consequence(fd, csq);

	if (ewmh_handle_struts(win)) {
		for (monitor_t *m = mon_head; m != NULL; m = m->next) {
			arrange(m, m->desk);
		}
	}

	if (!csq->manage) {
		free(csq->layer);
		free(csq->state);
		window_show(win);
		return;
	}

	if (csq->node_desc[0] != '\0') {
		coordinates_t ref = {m, d, f};
		coordinates_t trg = {NULL, NULL, NULL};
		if (node_from_desc(csq->node_desc, &ref, &trg) == SELECTOR_OK) {
			m = trg.monitor;
			d = trg.desktop;
			f = trg.node;
		}
	} else if (csq->desktop_desc[0] != '\0') {
		coordinates_t ref = {m, d, NULL};
		coordinates_t trg = {NULL, NULL, NULL};
		if (desktop_from_desc(csq->desktop_desc, &ref, &trg) == SELECTOR_OK) {
			m = trg.monitor;
			d = trg.desktop;
			f = trg.desktop->focus;
		}
	} else if (csq->monitor_desc[0] != '\0') {
		coordinates_t ref = {m, NULL, NULL};
		coordinates_t trg = {NULL, NULL, NULL};
		if (monitor_from_desc(csq->monitor_desc, &ref, &trg) == SELECTOR_OK) {
			m = trg.monitor;
			d = trg.monitor->desk;
			f = trg.monitor->desk->focus;
		}
	}

	if (csq->sticky) {
		m = mon;
		d = mon->desk;
		f = mon->desk->focus;
	}

	if (csq->split_dir[0] != '\0' && f != NULL) {
		direction_t dir;
		if (parse_direction(csq->split_dir, &dir)) {
			presel_dir(m, d, f, dir);
		}
	}

	if (csq->split_ratio != 0 && f != NULL) {
		presel_ratio(m, d, f, csq->split_ratio);
	}

	node_t *n = make_node(win);
	client_t *c = make_client();
	c->border_width = csq->border ? d->border_width : 0;
	n->client = c;
	initialize_client(n);
	initialize_floating_rectangle(n);

	if (c->floating_rectangle.x == 0 && c->floating_rectangle.y == 0) {
		csq->center = true;
	}

	monitor_t *mm = monitor_from_client(c);
	embrace_client(mm, c);
	adapt_geometry(&mm->rectangle, &m->rectangle, n);

	if (csq->center) {
		window_center(m, c);
	}

	snprintf(c->class_name, sizeof(c->class_name), "%s", csq->class_name);
	snprintf(c->instance_name, sizeof(c->instance_name), "%s", csq->instance_name);

	f = insert_node(m, d, n, f);
	clients_count++;

	put_status(SBSC_MASK_NODE_MANAGE, "node_manage 0x%08X 0x%08X 0x%08X 0x%08X\n", m->id, d->id, win, f!=NULL?f->id:0);

	if (f != NULL && f->client != NULL && csq->state != NULL && *(csq->state) == STATE_FLOATING) {
		c->layer = f->client->layer;
	}

	if (csq->layer != NULL) {
		c->layer = *(csq->layer);
	}

	if (csq->state != NULL) {
		set_state(m, d, n, *(csq->state));
	}

	set_hidden(m, d, n, csq->hidden);
	set_sticky(m, d, n, csq->sticky);
	set_private(m, d, n, csq->private);
	set_locked(m, d, n, csq->locked);

	arrange(m, d);

	uint32_t values[] = {CLIENT_EVENT_MASK | (focus_follows_pointer ? XCB_EVENT_MASK_ENTER_WINDOW : 0)};
	xcb_change_window_attributes(dpy, win, XCB_CW_EVENT_MASK, values);
	set_window_state(win, XCB_ICCCM_WM_STATE_NORMAL);
	window_grab_buttons(win);

	if (d == m->desk) {
		show_node(d, n);
	} else {
		hide_node(d, n);
	}

	if (!csq->hidden && csq->focus) {
		if (d == mon->desk || csq->follow) {
			focus_node(m, d, n);
		} else {
			activate_node(m, d, n);
		}
	} else {
		stack(d, n, false);
	}

	ewmh_set_wm_desktop(n, d);
	ewmh_update_client_list(false);
	free(csq->layer);
	free(csq->state);
}