From 693768da1faf295fd580bd4b2acfdef958daa0c0 Mon Sep 17 00:00:00 2001 From: Sebastien Estienne Date: Sat, 1 Oct 2005 15:44:41 +0000 Subject: * converted the menubar in an eventbox * handle panel transparency * use subprocess.Popen instead of os.system git-svn-id: file:///home/lennart/svn/public/service-discovery-applet/trunk@22 3be567f1-68ff-0310-b24a-ad7cc433fd2f --- schemas/service-discovery-applet.schemas | 12 --- src/service-discovery-applet.in | 137 +++++++++++-------------------- src/service-discovery-config.glade | 22 +---- 3 files changed, 48 insertions(+), 123 deletions(-) diff --git a/schemas/service-discovery-applet.schemas b/schemas/service-discovery-applet.schemas index cc23770..f6afac6 100644 --- a/schemas/service-discovery-applet.schemas +++ b/schemas/service-discovery-applet.schemas @@ -13,18 +13,6 @@ - - /schemas/apps/service-discovery-applet/options/show_applet_name - /apps/service-discovery-applet/options/show_applet_name - service-discovery-applet - bool - FALSE - - Display the name of the applet. - - - - /schemas/apps/service-discovery-applet/services/_ssh._tcp /apps/service-discovery-applet/services/_ssh._tcp diff --git a/src/service-discovery-applet.in b/src/service-discovery-applet.in index 5b77225..ad74f70 100755 --- a/src/service-discovery-applet.in +++ b/src/service-discovery-applet.in @@ -15,6 +15,7 @@ # * dict([el.split('=',1) for el in l ]) import os +import subprocess import sys import pygtk pygtk.require('2.0') @@ -76,56 +77,28 @@ class ServiceDiscoveryApplet(gnomeapplet.Applet): self.show_local_services = self.gc_client.get_bool ("%s/%s" % (self.gc_options,"show_local_services")) self.show_notifications = self.gc_client.get_bool ("%s/%s" % (self.gc_options,"show_notifications")) - self.show_applet_name = self.gc_client.get_bool ("%s/%s" % (self.gc_options,"show_applet_name")) - self.gc_client.add_dir (self.gc_services, gconf.CLIENT_PRELOAD_NONE) self.gc_client.notify_add (self.gc_services, self.gc_services_cb,None) + self.gc_client.notify_add (self.gc_options, self.gc_options_cb, None) - # Applet MenuItem - image = gtk.Image() - image.set_from_file("@iconsdir@/24x24/service-discovery-applet.png") - menuZC = gtk.ImageMenuItem() - zc_label = gtk.Label('ZeroConf') - if self.show_applet_name == False: - zc_label.set_no_show_all(True) - menuZC.add(zc_label) - menuZC.set_image(image) - menuZC.set_right_justified(True) - menuZC.set_submenu(self.service_menu); - - self.gc_client.notify_add (self.gc_options, self.gc_options_cb, zc_label) - - # Applet MenuBar - gtk.rc_parse_string(''' - style "service-discovery-applet-menubar-style" - { - GtkMenuBar::shadow-type = none - GtkMenuBar::internal-padding = 0 - } - widget "*.service-discovery-applet" style "service-discovery-applet-menubar-style"''') - - menubar = gtk.MenuBar() - menubar.set_name("service-discovery-applet") - menubar.connect("button-press-event", self.on_menubar_click) - menubar.connect("size-allocate", self.on_menubar_size_allocate) - menubar.add(menuZC) - - #self.eb = gtk.EventBox() - #self.eb.set_events(gtk.gdk.POINTER_MOTION_MASK) - #self.eb.connect("button-press-event", self.on_button_press) - ##self.eb.connect('motion-notify-event', self.on_applet_motion_notify_event) - ##self.eb.connect('leave-notify-event', self.on_applet_leave_notify_event) - #self.applet.add(self.eb) - - #zclabel = gtk.Label('ZeroConf') - #self.eb.add(zclabel) + self.eb = gtk.EventBox() + self.eb.set_events(gtk.gdk.POINTER_MOTION_MASK) + self.eb.connect("button-press-event", self.on_button_press) + #self.eb.connect('motion-notify-event', self.on_applet_motion_notify_event) + #self.eb.connect('leave-notify-event', self.on_applet_leave_notify_event) + + self.eb.connect("size-allocate", self.on_eventbox_size_allocate) + + self.applet.add(self.eb) + + self.image = gtk.Image() + self.image.set_from_file("/usr/share/service-discovery-applet/icons//24x24/service-discovery-applet.png") + self.eb.add(self.image) - #expand the applet with the panel - self.applet.connect("change_background", self.on_change_background, menubar) - self.applet.set_applet_flags(gnomeapplet.EXPAND_MINOR) - self.applet.add(menubar) - + applet.connect("change_background", self.on_change_background) + applet.set_applet_flags(gnomeapplet.EXPAND_MINOR) + # funky right-click menu menuXml = """ @@ -158,14 +131,6 @@ class ServiceDiscoveryApplet(gnomeapplet.Applet): self.applet.show_all() - - def on_button_press(self, widget, event): - if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: - return False - elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: - #self.echelon.toggle_window_visible() - print "on_button_press" - def siocgifname(self, interface): if interface <= 0: return "any" @@ -176,8 +141,15 @@ class ServiceDiscoveryApplet(gnomeapplet.Applet): print "Service data for service '%s' of type '%s' in domain '%s' on %s.%i:" % (name, type, domain, self.siocgifname(interface), protocol) print "\tHost %s (%s), port %i, TXT data: %s" % (host, address, port, avahi.txt_array_to_string_array(txt)) if os.path.exists("@scriptsdir@/%s.sh" % type): - cmd = '@scriptsdir@/%s.sh "%s" %s %s %i "%s"' % (type, name, host, address, port," ".join(avahi.txt_array_to_string_array(txt))) - os.system(cmd) + cmd = [] + cmd.append("@scriptsdir@/%s.sh" % type) + cmd.append("%s" % name) + cmd.append("%s" % host) + cmd.append("%s" % address) + cmd.append("%i" % port) + cmd.append('%s' % " ".join(avahi.txt_array_to_string_array(txt))) + print cmd + pid = subprocess.Popen(cmd).pid def print_error(self, err): print "Error:", str(err) @@ -289,42 +261,31 @@ class ServiceDiscoveryApplet(gnomeapplet.Applet): self.service_menu.remove(self.zc_types[type].get_attach_widget()) del self.zc_types[type] + def on_button_press(self, widget, event): + if event.type == gtk.gdk.BUTTON_PRESS and event.button == 3: + return False + elif event.type == gtk.gdk.BUTTON_PRESS and event.button == 1: + self.service_menu.show_all() + self.service_menu.popup(None, None, None, event.button, event.time) + return True - # Callback: panel background changed - def on_change_background(self, panelapplet, backgroundtype, color, pixmap, menubar): - menubar.modify_bg(gtk.STATE_NORMAL, color) - - if backgroundtype == gnomeapplet.PIXMAP_BACKGROUND: - print "PIXMAP_BACKGROUND" - s3 = menubar.get_style() - s3.bg_pixmap[gtk.STATE_NORMAL] = pixmap - - if backgroundtype == gnomeapplet.COLOR_BACKGROUND: - print "COLOR_BACKGROUND" - - if backgroundtype == gnomeapplet.NO_BACKGROUND: - print "NO_BACKGROUND" - - - - def on_menubar_click(self, widget, event): - # allow Middle- and Right-Mouse-Button to go through to the applet window - if event.button != 1: - widget.emit_stop_by_name("button-press-event") - return False - - # This little hack is required to get Fitt's Law compliance - - # i.e. to get the Menubar to be the full height of the panel. - def on_menubar_size_allocate(self, menubar, rect): + def on_eventbox_size_allocate(self, eventbox, rect): if (rect.x <= 0) or (rect.y <= 0): - return False + return False rect.x -= 1 rect.y -= 1 rect.width += 2 rect.height += 2 - gtk.Widget.size_allocate(menubar, rect) + gtk.Widget.size_allocate(eventbox, rect) return False + def on_change_background(self, panelapplet, backgroundtype, color, pixmap): + self.eb.modify_bg(gtk.STATE_NORMAL, color) + + if backgroundtype == gnomeapplet.PIXMAP_BACKGROUND: + s = self.eb.get_style() + s.bg_pixmap[gtk.STATE_NORMAL] = pixmap + def on_about(self, component, verb, applet): icon = gtk.Image() icon.set_from_file("@iconsdir@/48x48/service-discovery-applet.png") @@ -339,7 +300,7 @@ class ServiceDiscoveryApplet(gnomeapplet.Applet): about.show() def on_config(self, component, verb, applet): - os.system("service-discovery-config") + pid = subprocess.Popen(["service-discovery-config", ""]).pid #FIXME replace with gconf key def start_service_discovery(self, component, verb, applet): @@ -382,14 +343,8 @@ class ServiceDiscoveryApplet(gnomeapplet.Applet): print "remove %s" % (service_type) del_service_type(self.interface, self.protocol, service_type, self.domain) - def gc_options_cb (self, client, cnxn_id, gc_entry, zc_label): + def gc_options_cb (self, client, cnxn_id, gc_entry): key = os.path.basename(gc_entry.key) - if key == "show_applet_name": - self.show_applet_name = client.get_bool(gc_entry.key) - if self.show_applet_name == False: - zc_label.hide() - else: - zc_label.show() if key == "show_notifications": self.show_notifications = client.get_bool(gc_entry.key) if key == "show_local_services": diff --git a/src/service-discovery-config.glade b/src/service-discovery-config.glade index 3724490..72f5c5b 100644 --- a/src/service-discovery-config.glade +++ b/src/service-discovery-config.glade @@ -18,6 +18,7 @@ GDK_WINDOW_TYPE_HINT_DIALOG GDK_GRAVITY_NORTH_WEST True + False True @@ -265,6 +266,7 @@ + True True Browse for my own services. True @@ -310,26 +312,6 @@ - - - - True - Display applet name in the panel. - True - GTK_RELIEF_NORMAL - True - False - False - True - - - 1 - 2 - 3 - 4 - fill - - False -- cgit