diff options
author | Ken Moore <ken@ixsystems.com> | 2017-06-27 13:18:55 -0400 |
---|---|---|
committer | Ken Moore <ken@ixsystems.com> | 2017-06-27 13:18:55 -0400 |
commit | cd5553238538bb4dc62aee43a5e1a0cd9c070e68 (patch) | |
tree | 14a24c455e82f457fdca39735d41bfced44fd593 | |
parent | Add a ton of the root-window registration routines to the NativeWindowSystem ... (diff) | |
download | lumina-cd5553238538bb4dc62aee43a5e1a0cd9c070e68.tar.gz lumina-cd5553238538bb4dc62aee43a5e1a0cd9c070e68.tar.bz2 lumina-cd5553238538bb4dc62aee43a5e1a0cd9c070e68.zip |
Commit a bunch more root-level session changes - should be almost ready to start testing and see if windows respond to the EWMH hints.
-rw-r--r-- | src-qt5/core/libLumina/LuminaX11.cpp | 7 | ||||
-rw-r--r-- | src-qt5/core/libLumina/NativeEventFilter.cpp | 26 | ||||
-rw-r--r-- | src-qt5/core/libLumina/RootWindow.cpp | 2 | ||||
-rw-r--r-- | src-qt5/core/libLumina/RootWindow.h | 2 | ||||
-rw-r--r-- | src-qt5/core/lumina-desktop-unified/LSession.cpp | 3 | ||||
-rw-r--r-- | src-qt5/core/lumina-desktop-unified/lumina-desktop.pro | 2 |
6 files changed, 25 insertions, 17 deletions
diff --git a/src-qt5/core/libLumina/LuminaX11.cpp b/src-qt5/core/libLumina/LuminaX11.cpp index 3bd248b6..b5dd62cd 100644 --- a/src-qt5/core/libLumina/LuminaX11.cpp +++ b/src-qt5/core/libLumina/LuminaX11.cpp @@ -75,9 +75,6 @@ void LXCB::createWMAtoms(){ i--; } } - - - } // === WindowList() === @@ -91,13 +88,13 @@ QList<WId> LXCB::WindowList(bool rawlist){ if( 1 == xcb_ewmh_get_client_list_reply( &EWMH, cookie, &winlist, NULL) ){ //qDebug() << " - Loop over items"; unsigned int wkspace = CurrentWorkspace(); - for(unsigned int i=0; i<winlist.windows_len; i++){ + for(unsigned int i=0; i<winlist.windows_len; i++){ //Filter out the Lumina Desktop windows if(WindowClass(winlist.windows[i]) == "Lumina Desktop Environment"){ continue; } //Also filter out windows not on the active workspace else if( (WindowWorkspace(winlist.windows[i])!=wkspace) && !rawlist ){ continue; } else{ - output << winlist.windows[i]; + output << winlist.windows[i]; } } } diff --git a/src-qt5/core/libLumina/NativeEventFilter.cpp b/src-qt5/core/libLumina/NativeEventFilter.cpp index 4914cea3..c289c450 100644 --- a/src-qt5/core/libLumina/NativeEventFilter.cpp +++ b/src-qt5/core/libLumina/NativeEventFilter.cpp @@ -51,26 +51,29 @@ XCB_CLIENT_MESSAGE #define SYSTEM_TRAY_BEGIN_MESSAGE 1 #define SYSTEM_TRAY_CANCEL_MESSAGE 2 -#include <LuminaX11.h> +//#include <LuminaX11.h> +#include <QX11Info> +#include <xcb/xcb_ewmh.h> #include <xcb/xcb_keysyms.h> #include <xcb/damage.h> #define DEBUG 0 //Special objects/variables for XCB parsing -static LXCB *XCB = 0; +static xcb_ewmh_connection_t EWMH; +//static LXCB *XCB = 0; static xcb_atom_t _NET_SYSTEM_TRAY_OPCODE = 0; inline void ParsePropertyEvent(xcb_property_notify_event_t *ev, NativeEventFilter *obj){ //qDebug() << "Got Property Event:" << ev->window << ev->atom; NativeWindow::Property prop = NativeWindow::None; //Now determine which properties are getting changed, and update the native window as appropriate - if(ev->atom == XCB->EWMH._NET_WM_NAME){ prop = NativeWindow::Title; } - else if(ev->atom == XCB->EWMH._NET_WM_ICON){ prop = NativeWindow::Icon; } - else if(ev->atom == XCB->EWMH._NET_WM_ICON_NAME){ prop = NativeWindow::ShortTitle; } - else if(ev->atom == XCB->EWMH._NET_WM_DESKTOP){ prop = NativeWindow::Workspace; } - else if(ev->atom == XCB->EWMH._NET_WM_WINDOW_TYPE ){ prop = NativeWindow::WinTypes; } - else if( ev->atom == XCB->EWMH._NET_WM_STATE){ prop = NativeWindow::States; } + if(ev->atom == EWMH._NET_WM_NAME){ prop = NativeWindow::Title; } + else if(ev->atom == EWMH._NET_WM_ICON){ prop = NativeWindow::Icon; } + else if(ev->atom == EWMH._NET_WM_ICON_NAME){ prop = NativeWindow::ShortTitle; } + else if(ev->atom == EWMH._NET_WM_DESKTOP){ prop = NativeWindow::Workspace; } + else if(ev->atom == EWMH._NET_WM_WINDOW_TYPE ){ prop = NativeWindow::WinTypes; } + else if( ev->atom == EWMH._NET_WM_STATE){ prop = NativeWindow::States; } //Send out the signal if necessary if(prop!=NativeWindow::None){ obj->emit WindowPropertyChanged(ev->window, prop); @@ -81,6 +84,12 @@ inline void ParsePropertyEvent(xcb_property_notify_event_t *ev, NativeEventFilte //Constructor for the Event Filter wrapper NativeEventFilter::NativeEventFilter() : QObject(){ EF = new EventFilter(this); + if(EWMH.nb_screens <=0){ + xcb_intern_atom_cookie_t *cookie = xcb_ewmh_init_atoms(QX11Info::connection(), &EWMH); + if(!xcb_ewmh_init_atoms_replies(&EWMH, cookie, NULL) ){ + qDebug() << "Error with XCB atom initializations"; + } + } if(_NET_SYSTEM_TRAY_OPCODE==0){ //_NET_SYSTEM_TRAY_OPCODE xcb_intern_atom_cookie_t cookie = xcb_intern_atom(QX11Info::connection(), 0, 23,"_NET_SYSTEM_TRAY_OPCODE"); @@ -90,7 +99,6 @@ NativeEventFilter::NativeEventFilter() : QObject(){ free(r); } } - if(XCB==0){ XCB = new LXCB(); } } void NativeEventFilter::start(){ diff --git a/src-qt5/core/libLumina/RootWindow.cpp b/src-qt5/core/libLumina/RootWindow.cpp index f7b73eac..65fb6083 100644 --- a/src-qt5/core/libLumina/RootWindow.cpp +++ b/src-qt5/core/libLumina/RootWindow.cpp @@ -130,7 +130,7 @@ void RootWindow::ResizeRoot(){ //Trigger a repaint and send out any signals this->setGeometry(fullscreen); this->update(); - emit RootResized(); + emit RootResized(fullscreen); if(!valid.isEmpty()){ emit NewScreens(valid); } if(!invalid.isEmpty()){ emit RemovedScreens(invalid); } } diff --git a/src-qt5/core/libLumina/RootWindow.h b/src-qt5/core/libLumina/RootWindow.h index 080c4bd1..a7792752 100644 --- a/src-qt5/core/libLumina/RootWindow.h +++ b/src-qt5/core/libLumina/RootWindow.h @@ -65,7 +65,7 @@ protected: signals: void RegisterVirtualRoot(WId); - void RootResized(); + void RootResized(QRect); void NewScreens(QStringList); // [screen_id_1, screen_id_2, etc..] void RemovedScreens(QStringList); // [screen_id_1, screen_id_2, etc..] diff --git a/src-qt5/core/lumina-desktop-unified/LSession.cpp b/src-qt5/core/lumina-desktop-unified/LSession.cpp index 3226fa82..c0a0ac7d 100644 --- a/src-qt5/core/lumina-desktop-unified/LSession.cpp +++ b/src-qt5/core/lumina-desktop-unified/LSession.cpp @@ -147,6 +147,8 @@ void LSession::setupSession(){ Lumina::ROOTWIN->ChangeWallpaper(scrns[i]->name(), RootWindow::Stretch, LOS::LuminaShare()+"desktop-background.jpg"); } Lumina::ROOTWIN->start(); + Lumina::NWS->setRoot_numberOfWorkspaces(QStringList() << "one" << "two"); + DesktopContextMenu *cmenu = new DesktopContextMenu(Lumina::ROOTWIN); connect(cmenu, SIGNAL(showLeaveDialog()), this, SLOT(StartLogout()) ); cmenu->start(); @@ -235,6 +237,7 @@ void LSession::setupGlobalConnections(){ //Root window connections connect(Lumina::ROOTWIN, SIGNAL(RegisterVirtualRoot(WId)), Lumina::NWS, SLOT(RegisterVirtualRoot(WId)) ); + connect(Lumina::ROOTWIN, SIGNAL(RootResized(QRect)), Lumina::NWS, SLOT(setRoot_desktopGeometry(QRect)) ); //Native Window Class connections connect(Lumina::NEF, SIGNAL(WindowCreated(WId)), Lumina::NWS, SLOT(NewWindowDetected(WId))); diff --git a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro index 58c7e774..a4e9867b 100644 --- a/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro +++ b/src-qt5/core/lumina-desktop-unified/lumina-desktop.pro @@ -12,7 +12,7 @@ target.path = $${L_BINDIR} include(../libLumina/ResizeMenu.pri) include(../libLumina/LDesktopUtils.pri) #includes LUtils and LOS include(../libLumina/LuminaXDG.pri) -include(../libLumina/LuminaX11.pri) +#include(../libLumina/LuminaX11.pri) include(../libLumina/LuminaSingleApplication.pri) include(../libLumina/LuminaThemes.pri) include(../libLumina/DesktopSettings.pri) |