11 class ListViewSearchLine(KListViewSearchLine
):
12 def updateSearch(self
, text
):
13 KListViewSearchLine
.updateSearch(self
, text
)
15 view
= self
.listView()
16 item
= view
.selectedItem()
17 if item
and item
.isVisible():
20 iterator
= QListViewItemIterator(view
, QListViewItemIterator
.Visible
)
21 item
= iterator
.current()
23 view
.setSelected(item
, True)
26 class Window(QDialog
):
28 QDialog
.__init
__(self
)
29 self
.setCaption("Switcha")
35 self
._windowList
= wmctrl
.getWindowList()
40 frame
.setFrameStyle(QFrame
.Box | QFrame
.Plain
)
41 layout
= QVBoxLayout(self
)
43 layout
.addWidget(frame
)
46 self
._lineEdit
= ListViewSearchLine(frame
)
47 QObject
.connect(self
._lineEdit
, SIGNAL("returnPressed()"),
48 self
.slotReturnPressed
)
50 self
._lineEdit
.installEventFilter(self
)
53 self
._view
= KListView(frame
)
54 self
._view
.addColumn("")
55 self
._view
.header().hide()
56 for name
, wid
in self
._windowList
:
57 name
= unicode(name
, "utf8")
58 QListViewItem(self
._view
, name
)
60 if len(self
._windowList
) > 0:
61 self
._view
.setSelected(self
._view
.firstChild(), True)
63 QObject
.connect(self
._view
, SIGNAL("clicked(QListViewItem*)"),
66 self
._lineEdit
.setListView(self
._view
)
69 layout
= QVBoxLayout(frame
)
71 layout
.addWidget(self
._lineEdit
)
72 layout
.addWidget(self
._view
)
75 def slotCurrentChanged(self
, item
):
77 self
.selectFirstItem()
80 def eventFilter(self
, obj
, event
):
81 if event
.type() != QEvent
.KeyPress
:
84 if event
.key() in (Qt
.Key_Up
, Qt
.Key_Down
):
85 newEvent
= QKeyEvent(event
.type(), event
.key(), event
.ascii(), event
.state(), event
.text())
86 QApplication
.postEvent(self
._view
, newEvent
)
92 def switchToWindow(self
, item
):
93 itemName
= unicode(item
.text(0)).encode("utf8")
94 for name
, wid
in self
._windowList
:
96 wmctrl
.switchToWindow(unicode(wid
))
101 def slotReturnPressed(self
):
102 item
= self
._view
.selectedItem()
103 if item
and item
.isVisible():
104 self
.switchToWindow(item
)
106 cmd
= unicode(self
._lineEdit
.text())
107 os
.spawnlp(os
.P_NOWAIT
, 'sh', 'sh', '-c', cmd
)
112 # Keep app global otherwise there is a crash on exit
114 description
= "A fast window switcher and application launcher"
116 aboutData
= KAboutData ("", "",\
117 version
, description
, KAboutData
.License_GPL
,\
118 "(C) 2007 Aurelien Gateau")
119 KCmdLineArgs
.init (sys
.argv
, aboutData
)
124 rect
= QApplication
.desktop().availableGeometry()
126 rect
.left() + (rect
.width() - window
.sizeHint().width()) / 2, \
127 rect
.top() + (rect
.height() - window
.sizeHint().height()) / 2 \
132 if __name__
== "__main__":