![]() |
2009-04-14
, 20:35
|
|
Posts: 2,427 |
Thanked: 2,986 times |
Joined on Dec 2007
|
#62
|
daperl, I would like to know how to make a dropdown menu appear from an applet icon, similar to the one that appears when you click the Home icon. I am thinking of making a list of applications in a text file, with two "fields" per line, something like:
![]() |
2009-04-15
, 07:01
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#63
|
The Following User Says Thank You to qole For This Useful Post: | ||
![]() |
2009-04-15
, 07:43
|
|
Posts: 2,427 |
Thanked: 2,986 times |
Joined on Dec 2007
|
#64
|
daperl: So I've decided to ... teach myself python.
I've stolen code from everywhere (including dbus-switchboard) and I've got my dropdown menu working!
The Following User Says Thank You to daperl For This Useful Post: | ||
![]() |
2009-04-15
, 17:39
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#65
|
![]() |
2009-04-17
, 22:51
|
|
Posts: 2,427 |
Thanked: 2,986 times |
Joined on Dec 2007
|
#66
|
#! /usr/bin/env python import gobject import gtk class QoleImageMenuItem(gtk.ImageMenuItem): def __init__(self, widget): gtk.ImageMenuItem.__init__(self) self.add(widget) class qole(): tah_timeout = 1000 icon_dir = '/usr/share/icons/hicolor/26x26/' app_icons = [\ ('Mplayer', 'apps', 'mplayer.png'),\ ('Terminal', 'hildon', 'qgn_list_xterm.png'),\ ('Browser', 'hildon', 'qgn_list_browser.png'),\ ('Chess', 'hildon', 'qgn_list_chess.png'),\ ('File Manager', 'hildon', 'qgn_list_filemanager.png'),\ ('Mahjong', 'hildon', 'qgn_list_mahjong.png')\ ] def __init__(self): self.screen = None self.root_win = None self.rec = None self.mapped = False self.is_icon_on_top = True self.press_event = None self.last_tah_press_num = -1 self.press_num = 0 self.pressing = False gtk.gdk.event_handler_set(self.on_any_event) self.i = 5 self.statusIcon = gtk.StatusIcon() self.statusIcon.set_from_stock(gtk.STOCK_CONNECT) self.clicked_menu = gtk.Menu() self.clicked_menu.__dict__['mapped'] = False self.clicked_menu.connect('map-event', self.on_map_menu, True) self.clicked_menu.connect('unmap-event', self.on_map_menu, False) self.clicked_menu.append(gtk.MenuItem('Clicked 1')) self.clicked_menu.append(gtk.MenuItem('Clicked 2')) self.clicked_menu.append(gtk.MenuItem('Clicked 3')) for t in self.app_icons: try: lbl = gtk.Label(t[0]) lbl.set_alignment(0.0, 0.5) imi = QoleImageMenuItem(lbl) path = self.icon_dir + t[1] + '/' + t[2] try: pb = gtk.gdk.pixbuf_new_from_file_at_size (path, 26, 26) img = gtk.image_new_from_pixbuf(pb) except: img = gtk.image_new_from_stock(gtk.STOCK_MISSING_IMAGE, gtk.ICON_SIZE_MENU) imi.set_image(img) self.clicked_menu.append(imi) except Exception, e: print e i = 1 for c in self.clicked_menu.get_children(): c.connect('activate', self.on_activate_mi, 'clicked '+str(i)) c.connect('enter-notify-event', self.on_enter_mi, 'clicked '+str(i)) i += 1 self.clicked_menu.show_all() gtk.status_icon_position_menu(self.clicked_menu, self.statusIcon) self.tah_menu = gtk.Menu() self.tah_menu.__dict__['mapped'] = False self.tah_menu.connect('map-event', self.on_map_menu, True) self.tah_menu.connect('unmap-event', self.on_map_menu, False) self.tah_menu.append(gtk.MenuItem('TAH 1')) self.tah_menu.append(gtk.MenuItem('TAH 2')) self.tah_menu.append(gtk.MenuItem('TAH 3')) self.tah_menu.append(gtk.MenuItem('TAH 4')) self.tah_menu.append(gtk.MenuItem('TAH 5')) self.tah_menu.append(gtk.MenuItem('TAH 6')) self.tah_menu.append(gtk.MenuItem('TAH 7')) i = 1 for c in self.tah_menu.get_children(): c.connect('activate', self.on_activate_mi, 'tah '+str(i)) c.connect('enter-notify-event', self.on_enter_mi, 'tah '+str(i)) i += 1 self.tah_menu.show_all() gtk.status_icon_position_menu(self.tah_menu, self.statusIcon) def on_activate_mi(self, mi, t): print 'activate mi',t,mi.get_name() def on_enter_mi(self, mi, event, t): #print 'enter mi',t p = mi.get_parent() p.deselect() p.select_item(mi) def on_map_menu(self, m, event, b): #print 'map menu before after',m.mapped,b m.mapped = b def tap_and_hold(self, event, tah_press_num): print 'num self.press_num',tah_press_num,self.press_num if self.pressing and tah_press_num == self.press_num: rec = self.rec x, y, m = self.root_win.get_pointer() print 'tah x y w h',x,y,rec.x,rec.y,rec.width,rec.height self.last_tah_press_num = tah_press_num self.clicked_menu.popdown() #self.tah_menu.popup(None,None,gtk.status_icon_position_menu,1,gtk.get_current_event_time(),self.statusIcon) self.tah_menu.popup(None,None,gtk.status_icon_position_menu,1,event.time+self.tah_timeout,self.statusIcon) return False def is_icon_event(self): #x, y, m = self.root_win.get_pointer() self.screen, self.rec, o = self.statusIcon.get_geometry() x, y, m = self.screen.get_root_window().get_pointer() dx = x - self.rec.x dy = y - self.rec.y return dx >=0 and dx <= self.rec.width and dy >= 0 and dy <= self.rec.height def set_menu_pos(self, menu): mw, mh = menu.get_toplevel().get_size() x = 0 y = 0 if self.is_icon_on_top: pass else: #x = self.rec.x + self.rec.width - mw x = self.rec.x - mw y = self.rec.y - mh - 10 print 'clicked menu x y',x,y,mw,mh return (x, y, False) def on_any_event(self, event): if event.type == gtk.gdk.MOTION_NOTIFY: return #print 'event',event.type if event.type == gtk.gdk.BUTTON_PRESS: if self.mapped and event.button == 1 and self.is_icon_event(): self.press_event = event.copy() self.pressing = True self.press_num += 1 gobject.timeout_add(self.tah_timeout, self.tap_and_hold, event, self.press_num) #print 'press',event.x,event.y,event.button elif event.type == gtk.gdk.BUTTON_RELEASE: self.pressing = False #print 'button release num last_num',self.press_num,self.last_tah_press_num #print 'release tma visible',self.tah_menu.props.visible if event.button == 1 and self.is_icon_event() and\ self.press_num != self.last_tah_press_num and not self.tah_menu.mapped: if self.clicked_menu.mapped: self.clicked_menu.popdown() else: #self.clicked_menu.popup(None,None,self.set_menu_pos,1,event.time) self.clicked_menu.popup(None,None,gtk.status_icon_position_menu,1,event.time,self.statusIcon) #print 'time for clicked menu' elif event.type == gtk.gdk.LEAVE_NOTIFY: self.pressing = False elif event.type == gtk.gdk.MAP: if not self.mapped: self.screen, rec, o = self.statusIcon.get_geometry() self.root_win = self.screen.get_root_window() print 'rec',rec.x,rec.y,rec.width,rec.height self.rec = rec self.mapped = True self.is_icon_on_top = rec.y < rec.height gtk.main_do_event(event) if __name__ == "__main__": q = qole() gtk.main()
The Following User Says Thank You to daperl For This Useful Post: | ||
![]() |
2009-12-23
, 16:18
|
Posts: 183 |
Thanked: 18 times |
Joined on Jul 2009
@ italy
|
#67
|
![]() |
2009-12-23
, 23:52
|
Posts: 183 |
Thanked: 18 times |
Joined on Jul 2009
@ italy
|
#68
|
![]() |
2009-12-31
, 23:26
|
|
Moderator |
Posts: 7,109 |
Thanked: 8,820 times |
Joined on Oct 2007
@ Vancouver, BC, Canada
|
#69
|
![]() |
2010-02-10
, 16:40
|
Posts: 6 |
Thanked: 0 times |
Joined on Feb 2010
|
#70
|
![]() |
Tags |
chroot, debian, easy debian, lxde, replacement |
|
daperl, I would like to know how to make a dropdown menu appear from an applet icon, similar to the one that appears when you click the Home icon. I am thinking of making a list of applications in a text file, with two "fields" per line, something like:
label 1, command 1
label 2, command 2
Then I could use the CSV reading module to read in the values and build the menu from that...
I want an applet to replace the hideous menu that I'm using.
qole.org --- twitter --- Easy Debian wiki page
Please don't send me a private message, post to the appropriate thread.
Thank you all for your donations!