10 class ListViewSearchLine(KListViewSearchLine
):
11 def updateSearch(self
, text
):
12 KListViewSearchLine
.updateSearch(self
, text
)
14 view
= self
.listView()
15 item
= view
.selectedItem()
16 if item
and item
.isVisible():
19 iterator
= QListViewItemIterator(view
, QListViewItemIterator
.Visible
)
20 item
= iterator
.current()
22 view
.setSelected(item
, True)
25 class Window(QDialog
):
27 QDialog
.__init
__(self
)
28 self
.setCaption("Switcha")
34 kwinModule
= KWinModule()
36 for wid
in kwinModule
.windows():
37 info
= KWin
.windowInfo(wid
)
38 windowType
= info
.windowType(NET
.AllTypesMask
)
39 if windowType
not in (NET
.Desktop
, NET
.Dock
, NET
.Menu
):
40 self
._windowList
.append(info
)
45 self
._lineEdit
= ListViewSearchLine(self
)
46 QObject
.connect(self
._lineEdit
, SIGNAL("returnPressed()"),
47 self
.slotReturnPressed
)
49 self
._lineEdit
.installEventFilter(self
)
52 self
._view
= KListView(self
)
53 self
._view
.addColumn("")
54 self
._view
.header().hide()
55 for info
in self
._windowList
:
56 item
= QListViewItem(self
._view
, info
.visibleName())
57 pix
= KWin
.icon(info
.win(), 16, 16, True)
58 item
.setPixmap(0, pix
)
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(self
)
72 layout
.addWidget(self
._lineEdit
)
73 layout
.addWidget(self
._view
)
76 def slotCurrentChanged(self
, item
):
78 self
.selectFirstItem()
81 def eventFilter(self
, obj
, event
):
82 if event
.type() != QEvent
.KeyPress
:
85 if event
.key() in (Qt
.Key_Up
, Qt
.Key_Down
):
86 newEvent
= QKeyEvent(event
.type(), event
.key(), event
.ascii(), event
.state(), event
.text())
87 QApplication
.postEvent(self
._view
, newEvent
)
93 def switchToWindow(self
, item
):
94 itemName
= item
.text(0)
95 for info
in self
._windowList
:
96 if info
.visibleName() == itemName
:
97 KWin
.forceActiveWindow(info
.win())
102 def slotReturnPressed(self
):
103 item
= self
._view
.selectedItem()
104 if item
and item
.isVisible():
105 self
.switchToWindow(item
)
107 cmd
= unicode(self
._lineEdit
.text())
108 os
.spawnlp(os
.P_NOWAIT
, 'sh', 'sh', '-c', cmd
)
113 # Keep app global otherwise there is a crash on exit
115 description
= "A fast window switcher and application launcher"
117 aboutData
= KAboutData ("", "",\
118 version
, description
, KAboutData
.License_GPL
,\
119 "(C) 2007 Aurelien Gateau")
120 KCmdLineArgs
.init (sys
.argv
, aboutData
)
125 rect
= QApplication
.desktop().availableGeometry()
127 rect
.left() + (rect
.width() - window
.sizeHint().width()) / 2, \
128 rect
.top() + (rect
.height() - window
.sizeHint().height()) / 2 \
133 if __name__
== "__main__":