x11: Hard-code 0 default screen
The screen number matters only on multi-head setups.
This commit is contained in:
parent
8f2748b1e1
commit
c7af7adda6
9 changed files with 15 additions and 71 deletions
|
@ -129,7 +129,6 @@ void XwaylandServerCrashTest::testCrash()
|
||||||
QCOMPARE(kwinApp()->x11Connection(), nullptr);
|
QCOMPARE(kwinApp()->x11Connection(), nullptr);
|
||||||
QCOMPARE(kwinApp()->x11DefaultScreen(), nullptr);
|
QCOMPARE(kwinApp()->x11DefaultScreen(), nullptr);
|
||||||
QCOMPARE(kwinApp()->x11RootWindow(), XCB_WINDOW_NONE);
|
QCOMPARE(kwinApp()->x11RootWindow(), XCB_WINDOW_NONE);
|
||||||
QCOMPARE(kwinApp()->x11ScreenNumber(), -1);
|
|
||||||
|
|
||||||
// Render a frame to ensure that the compositor doesn't crash.
|
// Render a frame to ensure that the compositor doesn't crash.
|
||||||
Compositor::self()->scene()->addRepaintFull();
|
Compositor::self()->scene()->addRepaintFull();
|
||||||
|
|
|
@ -17,8 +17,6 @@
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
|
|
||||||
int screen_number = 0;
|
|
||||||
|
|
||||||
InputRedirection *InputRedirection::s_self = nullptr;
|
InputRedirection *InputRedirection::s_self = nullptr;
|
||||||
|
|
||||||
void InputRedirection::registerShortcut(const QKeySequence &shortcut, QAction *action)
|
void InputRedirection::registerShortcut(const QKeySequence &shortcut, QAction *action)
|
||||||
|
@ -101,7 +99,6 @@ private:
|
||||||
void TestVirtualDesktops::init()
|
void TestVirtualDesktops::init()
|
||||||
{
|
{
|
||||||
VirtualDesktopManager::create();
|
VirtualDesktopManager::create();
|
||||||
screen_number = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestVirtualDesktops::cleanup()
|
void TestVirtualDesktops::cleanup()
|
||||||
|
|
|
@ -331,9 +331,7 @@ void Compositor::initializeX11()
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_selectionOwner) {
|
if (!m_selectionOwner) {
|
||||||
char selection_name[100];
|
m_selectionOwner = std::make_unique<CompositorSelectionOwner>("_NET_WM_CM_S0");
|
||||||
sprintf(selection_name, "_NET_WM_CM_S%d", Application::x11ScreenNumber());
|
|
||||||
m_selectionOwner = std::make_unique<CompositorSelectionOwner>(selection_name);
|
|
||||||
connect(m_selectionOwner.get(), &CompositorSelectionOwner::lostOwnership, this, &Compositor::stop);
|
connect(m_selectionOwner.get(), &CompositorSelectionOwner::lostOwnership, this, &Compositor::stop);
|
||||||
}
|
}
|
||||||
if (!m_selectionOwner->owning()) {
|
if (!m_selectionOwner->owning()) {
|
||||||
|
|
14
src/main.cpp
14
src/main.cpp
|
@ -60,23 +60,9 @@ namespace KWin
|
||||||
{
|
{
|
||||||
|
|
||||||
Options *options;
|
Options *options;
|
||||||
|
|
||||||
Atoms *atoms;
|
Atoms *atoms;
|
||||||
|
|
||||||
int screen_number = -1;
|
|
||||||
|
|
||||||
int Application::crashes = 0;
|
int Application::crashes = 0;
|
||||||
|
|
||||||
void Application::setX11ScreenNumber(int screenNumber)
|
|
||||||
{
|
|
||||||
screen_number = screenNumber;
|
|
||||||
}
|
|
||||||
|
|
||||||
int Application::x11ScreenNumber()
|
|
||||||
{
|
|
||||||
return screen_number;
|
|
||||||
}
|
|
||||||
|
|
||||||
Application::Application(Application::OperationMode mode, int &argc, char **argv)
|
Application::Application(Application::OperationMode mode, int &argc, char **argv)
|
||||||
: QApplication(argc, argv)
|
: QApplication(argc, argv)
|
||||||
, m_eventFilter(new XcbEventFilter())
|
, m_eventFilter(new XcbEventFilter())
|
||||||
|
|
10
src/main.h
10
src/main.h
|
@ -58,7 +58,6 @@ class KWIN_EXPORT Application : public QApplication
|
||||||
Q_PROPERTY(quint32 x11Time READ x11Time WRITE setX11Time)
|
Q_PROPERTY(quint32 x11Time READ x11Time WRITE setX11Time)
|
||||||
Q_PROPERTY(quint32 x11RootWindow READ x11RootWindow CONSTANT)
|
Q_PROPERTY(quint32 x11RootWindow READ x11RootWindow CONSTANT)
|
||||||
Q_PROPERTY(void *x11Connection READ x11Connection NOTIFY x11ConnectionChanged)
|
Q_PROPERTY(void *x11Connection READ x11Connection NOTIFY x11ConnectionChanged)
|
||||||
Q_PROPERTY(int x11ScreenNumber READ x11ScreenNumber CONSTANT)
|
|
||||||
Q_PROPERTY(KSharedConfigPtr config READ config WRITE setConfig)
|
Q_PROPERTY(KSharedConfigPtr config READ config WRITE setConfig)
|
||||||
Q_PROPERTY(KSharedConfigPtr kxkbConfig READ kxkbConfig WRITE setKxkbConfig)
|
Q_PROPERTY(KSharedConfigPtr kxkbConfig READ kxkbConfig WRITE setKxkbConfig)
|
||||||
public:
|
public:
|
||||||
|
@ -149,15 +148,6 @@ public:
|
||||||
*/
|
*/
|
||||||
static void createAboutData();
|
static void createAboutData();
|
||||||
|
|
||||||
/**
|
|
||||||
* @returns the X11 Screen number. If not applicable it's set to @c -1.
|
|
||||||
*/
|
|
||||||
static int x11ScreenNumber();
|
|
||||||
/**
|
|
||||||
* Sets the X11 screen number of this KWin instance to @p screenNumber.
|
|
||||||
*/
|
|
||||||
static void setX11ScreenNumber(int screenNumber);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns the X11 root window.
|
* @returns the X11 root window.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -108,8 +108,8 @@ class KWinSelectionOwner : public KSelectionOwner
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit KWinSelectionOwner(int screen)
|
explicit KWinSelectionOwner()
|
||||||
: KSelectionOwner(make_selection_atom(screen), screen)
|
: KSelectionOwner(make_selection_atom())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,13 +150,9 @@ private:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xcb_atom_t make_selection_atom(int screen_P)
|
xcb_atom_t make_selection_atom()
|
||||||
{
|
{
|
||||||
if (screen_P < 0) {
|
QByteArray screen(QByteArrayLiteral("WM_S0"));
|
||||||
screen_P = QX11Info::appScreen();
|
|
||||||
}
|
|
||||||
QByteArray screen(QByteArrayLiteral("WM_S"));
|
|
||||||
screen.append(QByteArray::number(screen_P));
|
|
||||||
ScopedCPointer<xcb_intern_atom_reply_t> atom(xcb_intern_atom_reply(
|
ScopedCPointer<xcb_intern_atom_reply_t> atom(xcb_intern_atom_reply(
|
||||||
kwinApp()->x11Connection(),
|
kwinApp()->x11Connection(),
|
||||||
xcb_intern_atom_unchecked(kwinApp()->x11Connection(), false, screen.length(), screen.constData()),
|
xcb_intern_atom_unchecked(kwinApp()->x11Connection(), false, screen.length(), screen.constData()),
|
||||||
|
@ -209,28 +205,15 @@ void ApplicationX11::lostSelection()
|
||||||
quit();
|
quit();
|
||||||
}
|
}
|
||||||
|
|
||||||
static xcb_screen_t *findXcbScreen(xcb_connection_t *connection, int screen)
|
|
||||||
{
|
|
||||||
for (xcb_screen_iterator_t it = xcb_setup_roots_iterator(xcb_get_setup(connection));
|
|
||||||
it.rem;
|
|
||||||
--screen, xcb_screen_next(&it)) {
|
|
||||||
if (screen == 0) {
|
|
||||||
return it.data;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ApplicationX11::performStartup()
|
void ApplicationX11::performStartup()
|
||||||
{
|
{
|
||||||
crashChecking();
|
crashChecking();
|
||||||
|
|
||||||
if (Application::x11ScreenNumber() == -1) {
|
xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(x11Connection())).data;
|
||||||
Application::setX11ScreenNumber(QX11Info::appScreen());
|
Q_ASSERT(screen);
|
||||||
}
|
setX11DefaultScreen(screen);
|
||||||
setX11DefaultScreen(findXcbScreen(x11Connection(), x11ScreenNumber()));
|
|
||||||
|
|
||||||
owner.reset(new KWinSelectionOwner(Application::x11ScreenNumber()));
|
owner.reset(new KWinSelectionOwner());
|
||||||
connect(owner.data(), &KSelectionOwner::failedToClaimOwnership, [] {
|
connect(owner.data(), &KSelectionOwner::failedToClaimOwnership, [] {
|
||||||
fputs(i18n("kwin: unable to claim manager selection, another wm running? (try using --replace)\n").toLocal8Bit().constData(), stderr);
|
fputs(i18n("kwin: unable to claim manager selection, another wm running? (try using --replace)\n").toLocal8Bit().constData(), stderr);
|
||||||
::exit(1);
|
::exit(1);
|
||||||
|
|
|
@ -20,7 +20,6 @@
|
||||||
|
|
||||||
namespace KWin
|
namespace KWin
|
||||||
{
|
{
|
||||||
extern int screen_number;
|
|
||||||
|
|
||||||
std::unique_ptr<RootInfo> RootInfo::s_self;
|
std::unique_ptr<RootInfo> RootInfo::s_self;
|
||||||
|
|
||||||
|
@ -116,7 +115,7 @@ RootInfo *RootInfo::create()
|
||||||
| NET::ActionChangeDesktop
|
| NET::ActionChangeDesktop
|
||||||
| NET::ActionClose;
|
| NET::ActionClose;
|
||||||
|
|
||||||
s_self.reset(new RootInfo(supportWindow, "KWin", properties, types, states, properties2, actions, screen_number));
|
s_self.reset(new RootInfo(supportWindow, "KWin", properties, types, states, properties2, actions));
|
||||||
return s_self.get();
|
return s_self.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1976,15 +1976,9 @@ static inline int defaultDepth()
|
||||||
if (depth != 0) {
|
if (depth != 0) {
|
||||||
return depth;
|
return depth;
|
||||||
}
|
}
|
||||||
int screen = Application::x11ScreenNumber();
|
xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(connection())).data;
|
||||||
for (xcb_screen_iterator_t it = xcb_setup_roots_iterator(xcb_get_setup(connection()));
|
Q_ASSERT(screen);
|
||||||
it.rem;
|
depth = screen->root_depth;
|
||||||
--screen, xcb_screen_next(&it)) {
|
|
||||||
if (screen == 0) {
|
|
||||||
depth = it.data->root_depth;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return depth;
|
return depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -261,7 +261,6 @@ bool Xwayland::createX11Connection()
|
||||||
|
|
||||||
m_app->setX11Connection(connection);
|
m_app->setX11Connection(connection);
|
||||||
m_app->setX11DefaultScreen(screen);
|
m_app->setX11DefaultScreen(screen);
|
||||||
m_app->setX11ScreenNumber(0);
|
|
||||||
m_app->setX11RootWindow(screen->root);
|
m_app->setX11RootWindow(screen->root);
|
||||||
|
|
||||||
m_app->createAtoms();
|
m_app->createAtoms();
|
||||||
|
@ -269,8 +268,8 @@ bool Xwayland::createX11Connection()
|
||||||
|
|
||||||
installSocketNotifier();
|
installSocketNotifier();
|
||||||
|
|
||||||
// Note that it's very important to have valid x11RootWindow(), x11ScreenNumber(), and
|
// Note that it's very important to have valid x11RootWindow(), and atoms when the
|
||||||
// atoms when the rest of kwin is notified about the new X11 connection.
|
// rest of kwin is notified about the new X11 connection.
|
||||||
Q_EMIT m_app->x11ConnectionChanged();
|
Q_EMIT m_app->x11ConnectionChanged();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -292,7 +291,6 @@ void Xwayland::destroyX11Connection()
|
||||||
|
|
||||||
m_app->setX11Connection(nullptr);
|
m_app->setX11Connection(nullptr);
|
||||||
m_app->setX11DefaultScreen(nullptr);
|
m_app->setX11DefaultScreen(nullptr);
|
||||||
m_app->setX11ScreenNumber(-1);
|
|
||||||
m_app->setX11RootWindow(XCB_WINDOW_NONE);
|
m_app->setX11RootWindow(XCB_WINDOW_NONE);
|
||||||
|
|
||||||
Q_EMIT m_app->x11ConnectionChanged();
|
Q_EMIT m_app->x11ConnectionChanged();
|
||||||
|
|
Loading…
Reference in a new issue