diff options
author | fluxgen <fluxgen> | 2002-11-27 21:56:56 (GMT) |
---|---|---|
committer | fluxgen <fluxgen> | 2002-11-27 21:56:56 (GMT) |
commit | 43c4469119b5b5357d01e59a23cf541fb233bd28 (patch) | |
tree | c8fa3329d84408eb5b9f0f3905cdb530f7cf5434 /util/fbrun/FbRun.cc | |
parent | 97a2ea9d2321cad25a00f2509b4474243696c621 (diff) | |
download | fluxbox_pavel-43c4469119b5b5357d01e59a23cf541fb233bd28.zip fluxbox_pavel-43c4469119b5b5357d01e59a23cf541fb233bd28.tar.bz2 |
using FbTk's new EventHandler interface
Diffstat (limited to 'util/fbrun/FbRun.cc')
-rw-r--r-- | util/fbrun/FbRun.cc | 77 |
1 files changed, 38 insertions, 39 deletions
diff --git a/util/fbrun/FbRun.cc b/util/fbrun/FbRun.cc index 7aa7938..1dc5ae7 100644 --- a/util/fbrun/FbRun.cc +++ b/util/fbrun/FbRun.cc | |||
@@ -19,11 +19,12 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: FbRun.cc,v 1.7 2002/11/26 17:13:36 fluxgen Exp $ | 22 | // $Id: FbRun.cc,v 1.8 2002/11/27 21:56:56 fluxgen Exp $ |
23 | 23 | ||
24 | #include "FbRun.hh" | 24 | #include "FbRun.hh" |
25 | 25 | ||
26 | #include "App.hh" | 26 | #include "App.hh" |
27 | #include "EventManager.hh" | ||
27 | 28 | ||
28 | #include <X11/Xlib.h> | 29 | #include <X11/Xlib.h> |
29 | #include <X11/keysym.h> | 30 | #include <X11/keysym.h> |
@@ -48,6 +49,7 @@ m_current_history_item(0) { | |||
48 | 49 | ||
49 | FbRun::~FbRun() { | 50 | FbRun::~FbRun() { |
50 | hide(); | 51 | hide(); |
52 | FbTk::EventManager::instance()->unregisterEventHandler(m_win); | ||
51 | XDestroyWindow(m_display, m_win); | 53 | XDestroyWindow(m_display, m_win); |
52 | } | 54 | } |
53 | 55 | ||
@@ -70,7 +72,7 @@ void FbRun::run(const std::string &command) { | |||
70 | else | 72 | else |
71 | cerr<<"FbRun Warning: Can't write command history to file: "<<m_history_file<<endl; | 73 | cerr<<"FbRun Warning: Can't write command history to file: "<<m_history_file<<endl; |
72 | } | 74 | } |
73 | 75 | FbTk::App::instance()->end(); // end application | |
74 | m_end = true; // mark end of processing | 76 | m_end = true; // mark end of processing |
75 | } | 77 | } |
76 | 78 | ||
@@ -192,7 +194,9 @@ void FbRun::createWindow(int x, int y, size_t width, size_t height) { | |||
192 | throw string("Failed to create FbRun window!"); | 194 | throw string("Failed to create FbRun window!"); |
193 | 195 | ||
194 | XSelectInput(m_display, m_win, KeyPressMask|ExposureMask); | 196 | XSelectInput(m_display, m_win, KeyPressMask|ExposureMask); |
195 | 197 | ||
198 | FbTk::EventManager::instance()->registerEventHandler(*this, m_win); | ||
199 | |||
196 | setNoMaximize(); | 200 | setNoMaximize(); |
197 | 201 | ||
198 | m_width = width; | 202 | m_width = width; |
@@ -200,48 +204,43 @@ void FbRun::createWindow(int x, int y, size_t width, size_t height) { | |||
200 | 204 | ||
201 | } | 205 | } |
202 | 206 | ||
203 | void FbRun::handleEvent(XEvent * const xev) { | 207 | void FbRun::keyPressEvent(XKeyEvent &ke) { |
204 | switch (xev->type) { | 208 | KeySym ks; |
205 | case KeyPress: { | 209 | char keychar[1]; |
206 | KeySym ks; | 210 | XLookupString(&ke, keychar, 1, &ks, 0); |
207 | char keychar[1]; | 211 | if (ks == XK_Escape) { |
208 | XLookupString(&xev->xkey, keychar, 1, &ks, 0); | 212 | m_end = true; |
209 | if (ks == XK_Escape) { | 213 | hide(); |
210 | m_end = true; | 214 | return; // no more processing |
211 | hide(); | 215 | } else if (ks == XK_Return) { |
212 | return; // no more processing | 216 | run(m_runtext); |
213 | } else if (ks == XK_Return) { | 217 | m_runtext = ""; // clear text |
214 | run(m_runtext); | 218 | } else if (ks == XK_BackSpace) { |
215 | m_runtext = ""; // clear text | 219 | if (m_runtext.size() != 0) { // we can't erase what we don't have ;) |
216 | } else if (ks == XK_BackSpace) { | 220 | m_runtext.erase(m_runtext.size()-1); |
217 | if (m_runtext.size() != 0) { // we can't erase what we don't have ;) | ||
218 | m_runtext.erase(m_runtext.size()-1); | ||
219 | redrawLabel(); | ||
220 | } | ||
221 | } else if (! IsModifierKey(ks) && !IsCursorKey(ks)) { | ||
222 | m_runtext+=keychar[0]; // append character | ||
223 | redrawLabel(); | ||
224 | } else if (IsCursorKey(ks)) { | ||
225 | |||
226 | switch (ks) { | ||
227 | case XK_Up: | ||
228 | prevHistoryItem(); | ||
229 | break; | ||
230 | case XK_Down: | ||
231 | nextHistoryItem(); | ||
232 | break; | ||
233 | } | ||
234 | redrawLabel(); | ||
235 | } | ||
236 | } break; | ||
237 | case Expose: | ||
238 | redrawLabel(); | 221 | redrawLabel(); |
222 | } | ||
223 | } else if (! IsModifierKey(ks) && !IsCursorKey(ks)) { | ||
224 | m_runtext+=keychar[0]; // append character | ||
225 | redrawLabel(); | ||
226 | } else if (IsCursorKey(ks)) { | ||
227 | |||
228 | switch (ks) { | ||
229 | case XK_Up: | ||
230 | prevHistoryItem(); | ||
239 | break; | 231 | break; |
240 | default: | 232 | case XK_Down: |
233 | nextHistoryItem(); | ||
241 | break; | 234 | break; |
235 | } | ||
236 | redrawLabel(); | ||
242 | } | 237 | } |
243 | } | 238 | } |
244 | 239 | ||
240 | void FbRun::exposeEvent(XExposeEvent &ev) { | ||
241 | redrawLabel(); | ||
242 | } | ||
243 | |||
245 | void FbRun::getSize(size_t &width, size_t &height) { | 244 | void FbRun::getSize(size_t &width, size_t &height) { |
246 | XWindowAttributes attr; | 245 | XWindowAttributes attr; |
247 | XGetWindowAttributes(m_display, m_win, &attr); | 246 | XGetWindowAttributes(m_display, m_win, &attr); |