void remove_sm_from_client_leader() { #ifdef Q_WS_X11 Atom type; int format, status; unsigned long nitems = 0; unsigned long extra = 0; unsigned char *data = 0; Atom atoms[ 2 ]; char *atom_names[ 2 ] = { ( char * ) "WM_CLIENT_LEADER", ( char * ) "SM_CLIENT_ID" }; XInternAtoms( QX11Info::display(), atom_names, 2, False, atoms ); QWidget w; KXErrorHandler handler; // ignore X errors status = XGetWindowProperty( QX11Info::display(), w.winId(), atoms[ 0 ], 0, 10000, false, XA_WINDOW, &type, &format, &nitems, &extra, &data ); if ( ( status == Success ) && !handler.error( false ) ) { if ( data && ( nitems > 0 ) ) { Window leader = * ( ( Window * ) data ); XDeleteProperty( QX11Info::display(), leader, atoms[ 1 ] ); } XFree( data ); } #endif }
void Gesture::grab_mouse( bool grab_P ) { if( grab_P ) { KXErrorHandler handler; static int mask[] = { 0, Button1MotionMask, Button2MotionMask, Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask, ButtonMotionMask, ButtonMotionMask, ButtonMotionMask }; #define XCapL KKeyNative::modXLock() #define XNumL KKeyNative::modXNumLock() #define XScrL KKeyNative::modXScrollLock() unsigned int mods[ 8 ] = { 0, XCapL, XNumL, XNumL | XCapL, XScrL, XScrL | XCapL, XScrL | XNumL, XScrL | XNumL | XCapL }; #undef XCapL #undef XNumL #undef XScrL for( int i = 0; i < 8; ++i ) XGrabButton( qt_xdisplay(), button, mods[ i ], qt_xrootwin(), False, ButtonPressMask | ButtonReleaseMask | mask[ button ], GrabModeAsync, GrabModeAsync, None, None ); bool err = handler.error( true ); kdDebug( 1217 ) << "Gesture grab:" << err << endl; } else { kdDebug( 1217 ) << "Gesture ungrab" << endl; XUngrabButton( qt_xdisplay(), button, AnyModifier, qt_xrootwin()); } }
// KWindowSystem::info() should be updated too if something has to be changed here KWindowInfoPrivateX11::KWindowInfoPrivateX11(WId _win, NET::Properties properties, NET::Properties2 properties2) : KWindowInfoPrivate(_win, properties, properties2) , KWindowInfoPrivateDesktopFileNameExtension() , KWindowInfoPrivatePidExtension() { installDesktopFileNameExtension(this); installPidExtension(this); KXErrorHandler handler; if (properties & NET::WMVisibleIconName) { properties |= NET::WMIconName | NET::WMVisibleName; // force, in case it will be used as a fallback } if (properties & NET::WMVisibleName) { properties |= NET::WMName; // force, in case it will be used as a fallback } if (properties2 & NET::WM2ExtendedStrut) { properties |= NET::WMStrut; // will be used as fallback } if (properties & NET::WMWindowType) { properties2 |= NET::WM2TransientFor; // will be used when type is not set } if ((properties & NET::WMDesktop) && KWindowSystem::mapViewport()) { properties |= NET::WMGeometry; // for viewports, the desktop (workspace) is determined from the geometry } properties |= NET::XAWMState; // force to get error detection for valid() m_info.reset(new NETWinInfo(QX11Info::connection(), _win, QX11Info::appRootWindow(), properties, properties2)); if (properties & NET::WMName) { if (m_info->name() && m_info->name()[ 0 ] != '\0') { m_name = QString::fromUtf8(m_info->name()); } else { m_name = KWindowSystem::readNameProperty(_win, XA_WM_NAME); } } if (properties & NET::WMIconName) { if (m_info->iconName() && m_info->iconName()[ 0 ] != '\0') { m_iconic_name = QString::fromUtf8(m_info->iconName()); } else { m_iconic_name = KWindowSystem::readNameProperty(_win, XA_WM_ICON_NAME); } } if (properties & (NET::WMGeometry | NET::WMFrameExtents)) { NETRect frame, geom; m_info->kdeGeometry(frame, geom); m_geometry.setRect(geom.pos.x, geom.pos.y, geom.size.width, geom.size.height); m_frame_geometry.setRect(frame.pos.x, frame.pos.y, frame.size.width, frame.size.height); } m_valid = !handler.error(false); // no sync - NETWinInfo did roundtrips }
void Gesture::grab_mouse( bool grab_P ) { kDebug() << grab_P; if( grab_P ) { kDebug() << "gesture grab"; Q_ASSERT( button != 0 ); KXErrorHandler handler; static int mask[] = { 0, Button1MotionMask, Button2MotionMask, Button3MotionMask, Button4MotionMask, Button5MotionMask, ButtonMotionMask, ButtonMotionMask, ButtonMotionMask, ButtonMotionMask }; #define XCapL KKeyServer::modXLock() #define XNumL KKeyServer::modXNumLock() #define XScrL KKeyServer::modXScrollLock() unsigned int mods[ 8 ] = { 0, XCapL, XNumL, XNumL | XCapL, XScrL, XScrL | XCapL, XScrL | XNumL, XScrL | XNumL | XCapL }; #undef XCapL #undef XNumL #undef XScrL for( int i = 0; i < 8; ++i ) XGrabButton( QX11Info::display(), button, mods[ i ], QX11Info::appRootWindow(), False, ButtonPressMask | ButtonReleaseMask | mask[ button ], GrabModeAsync, GrabModeAsync, None, None ); bool err = handler.error( true ); kDebug() << "Gesture grab:" << err; } else { kDebug() << "Gesture ungrab"; XUngrabButton( QX11Info::display(), button, AnyModifier, QX11Info::appRootWindow()); } }