Hello community,
here is the log from the commit of package kdebase3
checked in at Mon Oct 23 00:00:38 CEST 2006.
--------
--- KDE/kdebase3/kdebase3.changes 2006-10-20 19:24:07.000000000 +0200
+++ /mounts/work_src_done/STABLE/kdebase3/kdebase3.changes 2006-10-22 23:49:21.000000000 +0200
@@ -1,0 +2,11 @@
+Sun Oct 22 23:42:59 CEST 2006 - llunak@suse.cz
+
+- remove patches disable-kcm-modules.diff and close-use-yast2.diff
+ that made clock applet use yast timezone module
+- patch KDE clock configuration to integrate better with SUSE
+ (#213897)
+- update 3_5_branch diff to include clock fix for picking up
+ timzone changes (#213897)
+- add patch for desktop lock to use xvkbd on tablet pc's (#213677)
+
+-------------------------------------------------------------------
Old:
----
clock-use-yast.diff
disable-kcm-modules.diff
New:
----
clock-suse-integrate.diff
lock-xvkbd.diff
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kdebase3.spec ++++++
--- /var/tmp/diff_new_pack.xV08UX/_old 2006-10-22 23:58:03.000000000 +0200
+++ /var/tmp/diff_new_pack.xV08UX/_new 2006-10-22 23:58:03.000000000 +0200
@@ -51,7 +51,7 @@
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Url: http://www.kde.org/
Version: 3.5.5
-Release: 17
+Release: 19
%define kde_version 3.5.5
Source0: kdebase-%{kde_version}.tar.bz2
Source3: startkde.suse.sh
@@ -78,7 +78,6 @@
Source921: kcheckpass-pam-legacy
Source22: bnc.desktop
Patch0: 3_5_BRANCH.diff
-Patch1: disable-kcm-modules.diff
Patch3: startkde.diff
Patch5: media-iPod.diff
Patch6: ksysguardd-openslp.diff
@@ -99,8 +98,9 @@
Patch39: kdesktop_icons.diff
Patch40: suse_default_move.diff
Patch43: kappfinder-auto.diff
-Patch44: clock-use-yast.diff
+Patch44: clock-suse-integrate.diff
Patch45: klipperrc.diff
+Patch46: lock-xvkbd.diff
Patch51: kcontrol.diff
Patch60: short-menus.diff
# from http://fred.hexbox.de/kde_patches/kmenu-search-fs20050503.diff
@@ -361,7 +361,7 @@
Summary: Set and list fileshares
Group: System/Management
Version: 2.0
-Release: 146
+Release: 148
%description -n fileshareset
This package contains the the fileshareset utility to allow users to
@@ -379,7 +379,6 @@
%prep
%setup -q -b 8 -b 13 -b 14 -n kdebase-%{kde_version}
%patch0
-%patch1
%patch3
%patch5
%patch6
@@ -404,6 +403,7 @@
%patch43
%patch44
%patch45
+%patch46
%patch51
%patch63
%patch60
@@ -1456,6 +1456,14 @@
%endif
%changelog -n kdebase3
+* Sun Oct 22 2006 - llunak@suse.cz
+- remove patches disable-kcm-modules.diff and close-use-yast2.diff
+ that made clock applet use yast timezone module
+- patch KDE clock configuration to integrate better with SUSE
+ (#213897)
+- update 3_5_branch diff to include clock fix for picking up
+ timzone changes (#213897)
+- add patch for desktop lock to use xvkbd on tablet pc's (#213677)
* Fri Oct 20 2006 - stbinner@suse.de
- add reboot option parameter to ksm-server-timed.diff dcop call
- update kickoff.diff from SVN:
++++++ 3_5_BRANCH.diff ++++++
--- /var/tmp/diff_new_pack.xV08UX/_old 2006-10-22 23:58:03.000000000 +0200
+++ /var/tmp/diff_new_pack.xV08UX/_new 2006-10-22 23:58:03.000000000 +0200
@@ -1,3 +1,22 @@
+--- kicker/applets/clock/clock.cpp.sav 2006-09-18 18:08:44.000000000 +0200
++++ kicker/applets/clock/clock.cpp 2006-10-20 14:03:24.000000000 +0200
+@@ -900,7 +900,6 @@ ClockApplet::ClockApplet(const QString&
+ connect(kapp, SIGNAL(kdisplayPaletteChanged()), SLOT(globalPaletteChange()));
+
+ reconfigure(); // initialize clock widget
+- showZone(zone->zoneIndex());
+ slotUpdate();
+
+ if (kapp->authorizeKAction("kicker_rmb"))
+@@ -1257,6 +1256,8 @@ void ClockApplet::reconfigure()
+ }
+
+ emit(updateLayout());
++
++ showZone(zone->zoneIndex());
+ }
+
+ void ClockApplet::setTimerTo60()
Index: kwin/client.cpp
===================================================================
--- kwin/client.cpp (.../tags/KDE/3.5.5/kdebase) (revision 595233)
++++++ clock-suse-integrate.diff ++++++
--- kcontrol/clock/tzone.cpp.sav 2006-01-04 14:58:37.000000000 +0100
+++ kcontrol/clock/tzone.cpp 2006-10-20 13:48:50.000000000 +0200
@@ -27,12 +27,16 @@
#include
#include
+#include
#include
#include
#include
#include
#include
+#include
+#include
+#include
//#include "xpm/world.xpm"
#include "tzone.h"
@@ -55,6 +59,8 @@ Tzone::Tzone(QWidget * parent, const cha
connect( tzonelist, SIGNAL(selectionChanged()), SLOT(handleZoneChange()) );
m_local = new QLabel(this);
+
+ setupSuseTimezone();
load();
@@ -158,28 +164,38 @@ void Tzone::save()
QString val = selectedzone;
#else
- QFile fTimezoneFile("/etc/timezone");
+ QString tz = "/usr/share/zoneinfo/" + selectedzone;
- if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) )
+ kdDebug() << "Set time zone " << tz << endl;
+
+ writeSuseTimezone( selectedzone );
+
+ if( !KStandardDirs::findExe( "zic" ).isEmpty())
{
- QTextStream t(&fTimezoneFile);
- t << selectedzone;
- fTimezoneFile.close();
+ KProcess proc;
+ proc << "zic" << "-l" << selectedzone;
+ proc.start( KProcess::Block );
}
+ else
+ {
+ QFile fTimezoneFile("/etc/timezone");
- QString tz = "/usr/share/zoneinfo/" + selectedzone;
-
- kdDebug() << "Set time zone " << tz << endl;
+ if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) )
+ {
+ QTextStream t(&fTimezoneFile);
+ t << selectedzone;
+ fTimezoneFile.close();
+ }
- if (!QFile::remove("/etc/localtime"))
- {
+ if (!QFile::remove("/etc/localtime"))
+ {
//After the KDE 3.2 release, need to add an error message
- }
- else
+ }
+ else
if (!KIO::NetAccess::file_copy(KURL(tz),KURL("/etc/localtime")))
KMessageBox::error( 0, i18n("Error setting new timezone."),
i18n("Timezone Error"));
-
+ }
QString val = ":" + tz;
#endif // !USE_SOLARIS
@@ -198,3 +214,58 @@ void Tzone::save()
currentZone();
}
+
+// read the configured timezone from /etc/sysconfig/clock
+// and simply set it as $TZ, KDE code then will take it as the timezone
+void Tzone::setupSuseTimezone()
+{
+ QFile f( "/etc/sysconfig/clock" );
+ if( !f.open( IO_ReadOnly ))
+ return;
+ QTextStream str( &f );
+ while( !str.atEnd())
+ {
+ QString line = str.readLine();
+ if( line.startsWith( "TIMEZONE=" ))
+ {
+ QRegExp r( "\\s*TIMEZONE=\"(.*)\"\\s*" );
+ if( r.exactMatch( line ))
+ {
+ QString tz = r.cap( 1 );
+ setenv( "TZ", tz.ascii(), 1 );
+ }
+ }
+ }
+}
+
+void Tzone::writeSuseTimezone( QString zone )
+{
+ QFile f( "/etc/sysconfig/clock" );
+ if( !f.open( IO_ReadOnly ))
+ return;
+ KSaveFile out( "/etc/sysconfig/clock", 0644 );
+ QFile* fout = out.file();
+ if( fout == NULL )
+ return;
+ QTextStream str( &f );
+ QTextStream strout( fout );
+ while( !str.atEnd())
+ {
+ QString line = str.readLine();
+ if( line.startsWith( "TIMEZONE=" ))
+ {
+ QRegExp r( "\\s*TIMEZONE=\"(.*)\"\\s*" );
+ if( r.exactMatch( line ))
+ {
+ QString tz = r.cap( 1 );
+ if( tz == zone ) // not changed, abort
+ {
+ out.abort();
+ return;
+ }
+ line = "TIMEZONE=\"" + zone + "\"";
+ }
+ }
+ strout << line << '\n';
+ }
+}
--- kcontrol/clock/tzone.h.sav 2005-09-29 21:33:59.000000000 +0200
+++ kcontrol/clock/tzone.h 2006-10-20 13:33:20.000000000 +0200
@@ -47,6 +47,8 @@ protected slots:
private:
void currentZone();
+ void setupSuseTimezone();
+ void writeSuseTimezone( QString timezone );
KTimezones m_zoneDb;
QLabel *m_local;
KTimezoneWidget *tzonelist;
--- kcontrol/clock/dtime.h.sav 2005-09-29 21:33:59.000000000 +0200
+++ kcontrol/clock/dtime.h 2006-10-20 15:10:07.000000000 +0200
@@ -65,6 +65,9 @@ signals:
void timeout();
void set_time();
void changeDate(QDate);
+#if 1
+ void configureTimeServer();
+#endif
private:
void findNTPutility();
@@ -72,7 +75,11 @@ private:
QWidget* privateLayoutWidget;
QCheckBox *setDateTimeAuto;
+#if 1
+ QPushButton *timeServerConfigure;
+#else
QComboBox *timeServerList;
+#endif
KDatePicker *cal;
QComboBox *month;
--- kcontrol/clock/dtime.cpp.sav 2005-09-29 21:33:59.000000000 +0200
+++ kcontrol/clock/dtime.cpp 2006-10-20 15:18:43.000000000 +0200
@@ -38,6 +38,7 @@
#include
#include
#include
+#include
#include "dtime.h"
#include "dtime.moc"
@@ -74,6 +75,18 @@ Dtime::Dtime(QWidget * parent, const cha
connect(setDateTimeAuto, SIGNAL(toggled(bool)), SLOT(configChanged()));
layout1->addWidget( setDateTimeAuto );
+#if 1
+ // simply add a pushbutton that'll invoke the yast module
+ ntpUtility = KStandardDirs::findExe( "rcntp");
+ timeServerConfigure = new QPushButton( i18n( "Configure" ), privateLayoutWidget, "timeServerConfigure" );
+ connect(timeServerConfigure, SIGNAL(clicked()), SLOT(configChanged()));
+ connect(timeServerConfigure, SIGNAL(clicked()), SLOT(configureTimeServer()));
+ connect(setDateTimeAuto, SIGNAL(toggled(bool)), timeServerConfigure, SLOT(setEnabled(bool)));
+ timeServerConfigure->setEnabled(false);
+ layout1->addWidget( timeServerConfigure );
+ if( ntpUtility.isEmpty())
+ privateLayoutWidget->hide();
+#else
timeServerList = new QComboBox( false, privateLayoutWidget, "timeServerList" );
connect(timeServerList, SIGNAL(activated(int)), SLOT(configChanged()));
connect(timeServerList, SIGNAL(textChanged(const QString &)), SLOT(configChanged()));
@@ -82,6 +95,7 @@ Dtime::Dtime(QWidget * parent, const cha
timeServerList->setEditable(true);
layout1->addWidget( timeServerList );
findNTPutility();
+#endif
// Date box
QGroupBox* dateBox = new QGroupBox( this, "dateBox" );
@@ -179,7 +193,11 @@ Dtime::Dtime(QWidget * parent, const cha
hour->setEnabled(false);
minute->setEnabled(false);
second->setEnabled(false);
+#if 1
+ timeServerConfigure->setEnabled(false);
+#else
timeServerList->setEnabled(false);
+#endif
setDateTimeAuto->setEnabled(false);
}
kclock->setEnabled(false);
@@ -241,6 +259,15 @@ void Dtime::configChanged(){
void Dtime::load()
{
KConfig config("kcmclockrc", true, false);
+#if 1
+ if( !ntpUtility.isEmpty())
+ {
+ KProcess proc;
+ proc << ntpUtility << "status";
+ proc.start( KProcess::Block );
+ setDateTimeAuto->setChecked( proc.exitStatus() == 0 );
+ }
+#else
config.setGroup("NTP");
timeServerList->insertStringList(QStringList::split(',', config.readEntry("servers",
i18n("Public Time Server (pool.ntp.org),\
@@ -249,6 +276,7 @@ europe.pool.ntp.org,\
north-america.pool.ntp.org,\
oceania.pool.ntp.org"))));
setDateTimeAuto->setChecked(config.readBoolEntry("enabled", false));
+#endif
// Reset to the current date and time
time = QTime::currentTime();
@@ -264,6 +292,7 @@ oceania.pool.ntp.org"))));
void Dtime::save()
{
KConfig config("kcmclockrc", false, false);
+#if 0
config.setGroup("NTP");
// Save the order, but don't duplicate!
@@ -301,7 +330,9 @@ void Dtime::save()
kdDebug() << "Set date from time server " << timeServer.latin1() << " success!" << endl;
}
}
- else {
+ else
+#endif
+ {
// User time setting
KProcess c_proc;
@@ -356,6 +387,13 @@ void Dtime::timeout()
kclock->setTime( time );
}
+void Dtime::configureTimeServer()
+{
+ KProcess proc;
+ proc << "/sbin/yast2" << "ntp-client";
+ proc.start( KProcess::DontCare );
+}
+
QString Dtime::quickHelp() const
{
return i18n("<h1>Date & Time</h1> This control module can be used to set the system date and"
++++++ lock-xvkbd.diff ++++++
--- kdesktop/lock/lockprocess.cc.sav 2006-10-13 17:15:38.000000000 +0200
+++ kdesktop/lock/lockprocess.cc 2006-10-19 18:13:52.000000000 +0200
@@ -36,6 +36,8 @@
#include
#include
#include
+#include
+#include
#include
#include
@@ -93,6 +95,8 @@ static Window gVRootData = 0;
static Atom gXA_VROOT;
static Atom gXA_SCREENSAVER_VERSION;
+extern Atom qt_wm_state;
+
//===========================================================================
//
// Screen saver handling process. Handles screensaver window,
@@ -108,7 +112,9 @@ LockProcess::LockProcess(bool child, boo
mVisibility(false),
mRestoreXF86Lock(false),
mForbidden(false),
- mAutoLogout(false)
+ mAutoLogout(false),
+ mVkbdProcess(NULL),
+ mKWinModule(NULL)
{
setupSignals();
@@ -874,10 +880,14 @@ bool LockProcess::checkPass()
{
if (mAutoLogout)
killTimer(mAutoLogoutTimerId);
+
+ showVkbd();
PasswordDlg passDlg( this, &greetPlugin);
int ret = execDialog( &passDlg );
+
+ hideVkbd();
XWindowAttributes rootAttr;
XGetWindowAttributes(qt_xdisplay(), RootWindow(qt_xdisplay(),
@@ -957,9 +967,13 @@ bool LockProcess::x11Event(XEvent *event
{
switch (event->type)
{
- case KeyPress:
case ButtonPress:
case MotionNotify:
+ case ButtonRelease:
+ if( forwardVkbdEvent( event ))
+ return true; // filter out
+ // fall through
+ case KeyPress:
if (mBusy || !mDialogs.isEmpty())
break;
mBusy = true;
@@ -996,11 +1010,30 @@ bool LockProcess::x11Event(XEvent *event
case ConfigureNotify: // from SubstructureNotifyMask on the root window
if(event->xconfigure.event == qt_xrootwin())
stayOnTop();
+ for( QValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin();
+ it != mVkbdWindows.end();
+ ++it ) {
+ if( (*it).id == event->xconfigure.window ) {
+ (*it).rect = QRect( event->xconfigure.x, event->xconfigure.y,
+ event->xconfigure.width, event->xconfigure.height );
+ break;
+ }
+ }
break;
case MapNotify: // from SubstructureNotifyMask on the root window
+ windowAdded( event->xmap.window, false );
if( event->xmap.event == qt_xrootwin())
stayOnTop();
break;
+ case DestroyNotify:
+ for( QValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin();
+ it != mVkbdWindows.end();
+ ++it )
+ if( (*it).id == event->xdestroywindow.window ) {
+ mVkbdWindows.remove( it );
+ break;
+ }
+ break;
}
// We have grab with the grab window being the root window.
@@ -1025,17 +1058,24 @@ bool LockProcess::x11Event(XEvent *event
void LockProcess::stayOnTop()
{
- if(!mDialogs.isEmpty())
+ if(!mDialogs.isEmpty() || !mVkbdWindows.isEmpty())
{
// this restacking is written in a way so that
// if the stacking positions actually don't change,
// all restacking operations will be no-op,
// and no ConfigureNotify will be generated,
// thus avoiding possible infinite loops
- XRaiseWindow( qt_xdisplay(), mDialogs.first()->winId()); // raise topmost
+ if( !mVkbdWindows.isEmpty())
+ XRaiseWindow( qt_xdisplay(), mVkbdWindows.first().id );
+ else
+ XRaiseWindow( qt_xdisplay(), mDialogs.first()->winId()); // raise topmost
// and stack others below it
- Window* stack = new Window[ mDialogs.count() + 1 ];
+ Window* stack = new Window[ mDialogs.count() + mVkbdWindows.count() + 1 ];
int count = 0;
+ for( QValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin();
+ it != mVkbdWindows.end();
+ ++it )
+ stack[ count++ ] = (*it).id;
for( QValueList< QWidget* >::ConstIterator it = mDialogs.begin();
it != mDialogs.end();
++it )
@@ -1130,4 +1170,200 @@ void LockProcess::msgBox( QMessageBox::I
execDialog( &box );
}
+static int run_vkbd = -1;
+void LockProcess::showVkbd()
+{
+ if( run_vkbd == - 1 ) {
+ int status = system( "hal-find-by-property --key system.formfactor.subtype --string tabletpc" );
+// status = 0; // enable for testing
+ run_vkbd = ( WIFEXITED( status ) && WEXITSTATUS( status ) == 0
+ && !KStandardDirs::findExe( "xvkbd" ).isEmpty()) ? 1 : 0;
+ }
+ if( run_vkbd ) {
+ mVkbdWindows.clear();
+ mVkbdLastEventWindow = None;
+ mKWinModule = new KWinModule( NULL, KWinModule::INFO_WINDOWS );
+ connect( mKWinModule, SIGNAL( windowAdded( WId )), SLOT( windowAdded( WId )));
+ mVkbdProcess = new KProcess;
+ *mVkbdProcess << "xvkbd" << "-compact" << "-geometry" << "-0-0" << "-xdm";
+ mVkbdProcess->start();
+ }
+}
+
+void LockProcess::hideVkbd()
+{
+ if( mVkbdProcess != NULL ) {
+ mVkbdProcess->kill();
+ delete mVkbdProcess;
+ mVkbdProcess = NULL;
+ delete mKWinModule;
+ mKWinModule = NULL;
+ mVkbdWindows.clear();
+ }
+}
+
+void LockProcess::windowAdded( WId w )
+{
+ windowAdded( w, true );
+}
+
+void LockProcess::windowAdded( WId w, bool managed )
+{
+ KWin::WindowInfo info = KWin::windowInfo( w, 0, NET::WM2WindowClass );
+ if( info.windowClassClass().lower() != "xvkbd" )
+ return;
+ // Unmanaged windows (i.e. popups) don't currently work anyway, since they
+ // don't have WM_CLASS set anyway. I could perhaps try tricks with X id
+ // ranges if really needed.
+ if( managed ) {
+ // withdraw the window, wait for it to be withdrawn, reparent it directly
+ // to root at the right position
+ XWithdrawWindow( qt_xdisplay(), w, qt_xscreen());
+ for(;;) {
+ Atom type;
+ int format;
+ unsigned long length, after;
+ unsigned char *data;
+ int r = XGetWindowProperty( qt_xdisplay(), w, qt_wm_state, 0, 2,
+ false, AnyPropertyType, &type, &format,
+ &length, &after, &data );
+ bool withdrawn = true;
+ if ( r == Success && data && format == 32 ) {
+ Q_UINT32 *wstate = (Q_UINT32*)data;
+ withdrawn = (*wstate == WithdrawnState );
+ XFree( (char *)data );
+ }
+ if( withdrawn )
+ break;
+ }
+ }
+ XSelectInput( qt_xdisplay(), w, StructureNotifyMask );
+ XWindowAttributes attr_geom;
+ if( !XGetWindowAttributes( qt_xdisplay(), w, &attr_geom ))
+ return;
+ int x = XDisplayWidth( qt_xdisplay(), qt_xscreen()) - attr_geom.width;
+ int y = XDisplayHeight( qt_xdisplay(), qt_xscreen()) - attr_geom.height;
+ if( managed ) {
+ XSetWindowAttributes attr;
+ attr.override_redirect = True;
+ XChangeWindowAttributes( qt_xdisplay(), w, CWOverrideRedirect, &attr );
+ XReparentWindow( qt_xdisplay(), w, qt_xrootwin(), x, y );
+ XMapWindow( qt_xdisplay(), w );
+ }
+ VkbdWindow data;
+ data.id = w;
+ data.rect = QRect( x, y, attr_geom.width, attr_geom.height );
+ mVkbdWindows.prepend( data );
+}
+
+bool LockProcess::forwardVkbdEvent( XEvent* event )
+{
+ if( mVkbdProcess == NULL )
+ return false;
+ QPoint pos;
+ Time time;
+ switch( event->type )
+ {
+ case ButtonPress:
+ case ButtonRelease:
+ pos = QPoint( event->xbutton.x, event->xbutton.y );
+ time = event->xbutton.time;
+ break;
+ case MotionNotify:
+ pos = QPoint( event->xmotion.x, event->xmotion.y );
+ time = event->xmotion.time;
+ break;
+ default:
+ return false;
+ }
+ // vkbd windows are kept topmost, so just find the first one in the position
+ for( QValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin();
+ it != mVkbdWindows.end();
+ ++it ) {
+ if( (*it).rect.contains( pos )) {
+ // Find the subwindow where the event should actually go.
+ // Not exactly cheap in the number of X roundtrips but oh well.
+ Window window = (*it).id;
+ Window root, child;
+ int root_x, root_y, x, y;
+ unsigned int mask;
+ for(;;) {
+ if( !XQueryPointer( qt_xdisplay(), window, &root, &child, &root_x, &root_y, &x, &y, &mask ))
+ return false;
+ if( child == None )
+ break;
+ window = child;
+ }
+ switch( event->type )
+ {
+ case ButtonPress:
+ case ButtonRelease:
+ event->xbutton.x = x;
+ event->xbutton.y = y;
+ event->xbutton.subwindow = None;
+ break;
+ case MotionNotify:
+ event->xmotion.x = x;
+ event->xmotion.y = y;
+ event->xmotion.subwindow = None;
+ break;
+ }
+ event->xany.window = window;
+ sendVkbdFocusInOut( window, time );
+ XSendEvent( qt_xdisplay(), window, False, 0, event );
+ return true;
+ }
+ }
+ sendVkbdFocusInOut( None, time );
+ return false;
+}
+
+// Fake EnterNotify/LeaveNotify events as the mouse moves. They're not sent by X
+// because of the grab and having them makes xvkbd highlight the buttons (but
+// not needed otherwise it seems).
+void LockProcess::sendVkbdFocusInOut( WId window, Time t )
+{
+ if( mVkbdLastEventWindow == window )
+ return;
+ if( mVkbdLastEventWindow != None ) {
+ XEvent e;
+ e.xcrossing.type = LeaveNotify;
+ e.xcrossing.display = qt_xdisplay();
+ e.xcrossing.window = mVkbdLastEventWindow;
+ e.xcrossing.root = qt_xrootwin();
+ e.xcrossing.subwindow = None;
+ e.xcrossing.time = t;
+ e.xcrossing.x = 0;
+ e.xcrossing.y = 0;
+ e.xcrossing.x_root = -1;
+ e.xcrossing.y_root = -1;
+ e.xcrossing.mode = NotifyNormal;
+ e.xcrossing.detail = NotifyAncestor;
+ e.xcrossing.same_screen = True;
+ e.xcrossing.focus = False;
+ e.xcrossing.state = 0;
+ XSendEvent( qt_xdisplay(), mVkbdLastEventWindow, False, 0, &e );
+ }
+ mVkbdLastEventWindow = window;
+ if( mVkbdLastEventWindow != None ) {
+ XEvent e;
+ e.xcrossing.type = EnterNotify;
+ e.xcrossing.display = qt_xdisplay();
+ e.xcrossing.window = mVkbdLastEventWindow;
+ e.xcrossing.root = qt_xrootwin();
+ e.xcrossing.subwindow = None;
+ e.xcrossing.time = t;
+ e.xcrossing.x = 0;
+ e.xcrossing.y = 0;
+ e.xcrossing.x_root = 0;
+ e.xcrossing.y_root = 0;
+ e.xcrossing.mode = NotifyNormal;
+ e.xcrossing.detail = NotifyAncestor;
+ e.xcrossing.same_screen = True;
+ e.xcrossing.focus = False;
+ e.xcrossing.state = 0;
+ XSendEvent( qt_xdisplay(), mVkbdLastEventWindow, False, 0, &e );
+ }
+}
+
#include "lockprocess.moc"
--- kdesktop/lock/lockprocess.h.sav 2006-10-10 13:00:33.000000000 +0200
+++ kdesktop/lock/lockprocess.h 2006-10-19 18:06:47.000000000 +0200
@@ -23,6 +23,7 @@
#include
class KLibrary;
+class KWinModule;
struct GreeterPluginHandle {
KLibrary *library;
@@ -70,6 +71,7 @@ private slots:
void suspend();
void checkDPMSActive();
void slotDeadTimePassed();
+ void windowAdded( WId );
private:
void configure();
@@ -94,6 +96,11 @@ private:
void stayOnTop();
void lockXF86();
void unlockXF86();
+ void showVkbd();
+ void hideVkbd();
+ bool forwardVkbdEvent( XEvent* event );
+ void sendVkbdFocusInOut( WId window, Time t );
+ void windowAdded( WId window, bool managed );
static QVariant getConf(void *ctx, const char *key, const QVariant &dflt);
bool mLocked;
@@ -125,6 +132,15 @@ private:
int mAutoLogoutTimerId;
int mAutoLogoutTimeout;
bool mAutoLogout;
+ KProcess* mVkbdProcess;
+ KWinModule* mKWinModule;
+ struct VkbdWindow
+ {
+ WId id;
+ QRect rect;
+ };
+ QValueList< VkbdWindow > mVkbdWindows;
+ WId mVkbdLastEventWindow;
};
#endif
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...
---------------------------------------------------------------------
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org