diff --git a/desktop.py b/desktop.py
index f64d48e..d0f3ad2 100755
--- a/desktop.py
+++ b/desktop.py
@@ -7,150 +7,132 @@ import re
import gobject
import gtk
import gtk.gdk
-import gtkimageview as giv
gettext.install("pydesktop")
CONFIG = os.path.expanduser("~/.config/pydesktop.conf")
def browse(title,filtername="",mimetypes=[],patterns=[]):
- chooser = gtk.FileChooserDialog(title,None, gtk.FILE_CHOOSER_ACTION_OPEN, ( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
- if filtername:
+ chooser = gtk.FileChooserDialog(title,None, gtk.FILE_CHOOSER_ACTION_OPEN, ( gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
+ if filtername:
+ filter = gtk.FileFilter()
+ filter.set_name(filtername)
+ for t in mimetypes:
+ filter.add_mime_type(t)
+ for p in patterns:
+ filter.add_pattern(p)
+ chooser.add_filter(filter)
filter = gtk.FileFilter()
- filter.set_name(filtername)
- for t in mimetypes:
- filter.add_mime_type(t)
- for p in patterns:
- filter.add_pattern(p)
+ filter.set_name(_("All files"))
+ filter.add_pattern("*")
chooser.add_filter(filter)
- filter = gtk.FileFilter()
- filter.set_name(_("All files"))
- filter.add_pattern("*")
- chooser.add_filter(filter)
- r = chooser.run()
- if r == gtk.RESPONSE_OK:
- result = chooser.get_filename()
- else:
- result = None
- chooser.destroy()
- return result
-
-class Clicker(gobject.GObject, giv.IImageTool):
- def __init__(self,menu):
- gobject.GObject.__init__(self)
- self.cache= giv.PixbufDrawCache()
- self.crosshair = gtk.gdk.Cursor(gtk.gdk.LEFT_PTR)
- self.menu = menu
-
- def do_button_press(self,ev):
-# print "Button pressed:",ev.button,ev.x,ev.y
- if ev.button == 3:
- self.menu.popup(None,None,None,1,0)
-
- def do_button_release(self, ev_button):
- pass
-
- def do_motion_notify(self, ev_motion):
- pass
-
- def do_pixbuf_changed(self, reset_fit, rect):
- pass
-
- def do_paint_image(self, draw_opts, drawable):
- self.cache.draw(draw_opts, drawable)
-
- def do_cursor_at_point(self, x, y):
- return self.crosshair
-
-gobject.type_register(Clicker)
+ r = chooser.run()
+ if r == gtk.RESPONSE_OK:
+ result = chooser.get_filename()
+ else:
+ result = None
+ chooser.destroy()
+ return result
+
+class ClickImage(gtk.Button):
+ def __init__(self):
+ gtk.Button.__init__(self)
+ self.img = gtk.Image()
+ self.img.show()
+ self.add(self.img)
+
+ def load(self,path):
+ self.img.set_from_file(path)
+
class Desktop(object):
- def __init__(self):
- self.window = gtk.Window()
- self.window.set_title("pyDesktop")
- self.window.connect("destroy",self.on_close)
- self.window.set_property("type-hint", gtk.gdk.WINDOW_TYPE_HINT_DESKTOP)
- self.window.fullscreen()
- screen_width = gtk.gdk.screen_width()
- screen_height = gtk.gdk.screen_height()
- self.window.set_decorated(False)
- self.window.resize(screen_width, screen_height)
- self.view = giv.ImageView()
- try:
- self.load_config()
- except IOError:
- print "Could not open config"
- self.wall = giv.ImageScrollWin(self.view)
- self.create_menu()
- clk = Clicker(self.menu)
- self.view.set_tool(clk)
- self.window.add(self.wall)
- self.window.show_all()
-
- def load_wallpaper(self,path):
- pixbuf = gtk.gdk.pixbuf_new_from_file(path)
- self.view.set_pixbuf(pixbuf,True)
-
- def load_config(self):
- self.menu_items = []
- cfg = open(CONFIG)
- cre = re.compile("^\s*(\S+)\s*=\s*(.*)$",re.L)
- comm = re.compile("\s*#.*",re.L)
- for line in cfg:
- line = comm.sub("",line)
- if line == "":
- continue
-
- m = cre.match(line)
- if m:
- t = m.group(1)
- e = m.group(2)
- if t == "Wallpaper":
- self.wallpaper_path = e
- self.load_wallpaper(e)
- else:
- self.menu_items.append((t,e))
- cfg.close()
-
- def save_config(self):
- cfg = open(CONFIG,'w')
- cfg.write("Wallpaper = "+self.wallpaper_path+"\n")
- for title,cmd in self.menu_items:
- cfg.write("%s = %s\n" % (title,cmd))
- cfg.close()
-
- def create_menu(self):
- self.menu = gtk.Menu()
- for title,cmd in self.menu_items:
- mi = gtk.MenuItem(label=title)
- mi.connect("activate",self.exec_menu,cmd)
- self.menu.add(mi)
- wpi = gtk.Image()
- wpi.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_MENU)
- wp = gtk.ImageMenuItem()
- wp.add(gtk.Label("Wallpaper..."))
- wp.set_image(wpi)
- wp.connect("activate",self.browse_wallpaper)
- self.menu.add(wp)
- exit = gtk.ImageMenuItem(gtk.STOCK_QUIT)
- exit.connect("activate",self.on_close)
- self.menu.add(exit)
- self.menu.show_all()
-
- def exec_menu(self,widget,command):
- os.system(command)
-
- def browse_wallpaper(self,widget):
- wp = browse("Select wallpaper",filtername="Images",mimetypes=["image/jpeg","image/png","image/svg+xml"])
- if wp:
- self.wallpaper_path = wp
- self.load_wallpaper(self.wallpaper_path)
-
- def on_close(self,widget):
- try:
- self.save_config()
- except IOError:
- print "Could not save config"
- gtk.main_quit()
+ def __init__(self):
+ self.window = gtk.Window()
+ self.window.set_title("pyDesktop")
+ self.window.connect("destroy",self.on_close)
+ self.window.set_property("type-hint", gtk.gdk.WINDOW_TYPE_HINT_DESKTOP)
+ self.window.fullscreen()
+ screen_width = gtk.gdk.screen_width()
+ screen_height = gtk.gdk.screen_height()
+ self.window.set_decorated(False)
+ self.window.resize(screen_width, screen_height)
+ self.wall = ClickImage()
+ self.wall.connect("button-press-event",self.on_click)
+ try:
+ self.load_config()
+ except IOError:
+ print "Could not open config"
+ self.create_menu()
+ self.window.add(self.wall)
+ self.window.show_all()
+
+ def on_click(self,widget,event):
+ if event.button == 3:
+ self.menu.popup(None,None,None,event.button, event.get_time())
+
+ def load_wallpaper(self,path):
+ self.wall.load(path)
+
+ def load_config(self):
+ self.menu_items = []
+ cfg = open(CONFIG)
+ cre = re.compile("^\s*(\S+)\s*=\s*(.*)$",re.L)
+ comm = re.compile("\s*#.*",re.L)
+ for line in cfg:
+ line = comm.sub("",line)
+ if line == "":
+ continue
+
+ m = cre.match(line)
+ if m:
+ t = m.group(1)
+ e = m.group(2)
+ if t == "Wallpaper":
+ self.wallpaper_path = e
+ self.load_wallpaper(e)
+ else:
+ self.menu_items.append((t,e))
+ cfg.close()
+
+ def save_config(self):
+ cfg = open(CONFIG,'w')
+ cfg.write("Wallpaper = "+self.wallpaper_path+"\n")
+ for title,cmd in self.menu_items:
+ cfg.write("%s = %s\n" % (title,cmd))
+ cfg.close()
+
+ def create_menu(self):
+ self.menu = gtk.Menu()
+ for title,cmd in self.menu_items:
+ mi = gtk.MenuItem(label=title)
+ mi.connect("activate",self.exec_menu,cmd)
+ self.menu.add(mi)
+ wpi = gtk.Image()
+ wpi.set_from_stock(gtk.STOCK_OPEN, gtk.ICON_SIZE_MENU)
+ wp = gtk.ImageMenuItem()
+ wp.add(gtk.Label("Wallpaper..."))
+ wp.set_image(wpi)
+ wp.connect("activate",self.browse_wallpaper)
+ self.menu.add(wp)
+ exit = gtk.ImageMenuItem(gtk.STOCK_QUIT)
+ exit.connect("activate",self.on_close)
+ self.menu.add(exit)
+ self.menu.show_all()
+
+ def exec_menu(self,widget,command):
+ os.system(command)
+
+ def browse_wallpaper(self,widget):
+ wp = browse("Select wallpaper",filtername="Images",mimetypes=["image/jpeg","image/png","image/svg+xml"])
+ if wp:
+ self.wallpaper_path = wp
+ self.load_wallpaper(self.wallpaper_path)
+
+ def on_close(self,widget):
+ try:
+ self.save_config()
+ except IOError:
+ print "Could not save config"
+ gtk.main_quit()
d = Desktop()
gtk.main()
diff --git a/gui.py b/gui.py
deleted file mode 100644
index 9e06859..0000000
--- a/gui.py
+++ /dev/null
@@ -1,194 +0,0 @@
-import pygtk
-import gtk
-import gobject
-
-def button(label,onclick,data=None):
- """Create and return a gtk.Button with given label,
- clicking it will call onclick()"""
- b = gtk.Button(label)
- b.connect("clicked", onclick,data)
- b.show()
- return b
-
-def toolbutton(stock_id,onclick,data=None):
- b = gtk.ToolButton(stock_id)
- b.connect("clicked",onclick,data)
- b.show()
- return b
-
-def stock_button(stock_id, onclick, data=None):
- """Create and return a stock gtk.Button,
- clicking it will call onclick()"""
- b = gtk.Button(stock=stock_id)
- b.connect("clicked", onclick, data)
- b.show()
- return b
-
-def icon_button(stock_id, onclick, data=None):
- """Create and return a gtk.Button without label,
- but with stock icon. Clicking it will call onclick()"""
- b = gtk.Button()
- i = gtk.Image()
- i.set_from_stock(stock_id, gtk.ICON_SIZE_SMALL_TOOLBAR)
- i.show()
- b.set_image(i)
- b.connect("clicked", onclick,data)
- b.show()
- return b
-
-def stock_text_button(stock_id,text, onclick, data=None):
- b = gtk.Button()
- i = gtk.Image()
- i.set_from_stock(stock_id, gtk.ICON_SIZE_SMALL_TOOLBAR)
- i.show()
- l = label(text)
- h = hbox([i,(l,True)])
- b.add(h)
- b.connect("clicked", onclick,data)
- b.show()
- return b
-
-def image_button(image_path, label, onclick, data=None):
- """Create and return a gtk.Button with icon and label.
- Icon will been got from image_path."""
- b = gtk.Button()
- h = gtk.HBox(spacing=10)
- h.set_border_width(5)
- i = gtk.Image()
- i.set_from_file(image_path)
- i.show()
- h.pack_start(i,False)
- l = gtk.Label()
- l.set_use_markup(True)
- l.set_markup(label)
- l.show()
- h.pack_start(l,False)
- h.show()
- b.add(h)
- b.connect("clicked",onclick, data)
- b.show()
- return b
-
-def image_toggle_button(image_path, label, onclick, data=None):
- """Create and return a gtk.ToggleButton with icon and label."""
- b = gtk.ToggleButton()
- l = gtk.Label()
- i = gtk.Image()
- h = gtk.HBox()
- i.set_from_file(image_path)
- i.show()
- l.set_use_markup(True)
- l.set_markup(label)
- l.show()
- h.pack_start(i)
- h.pack_start(l)
- h.show()
- b.add(h)
- b.connect("toggled", onclick,data)
- b.show()
- return b
-
-def hbox(widget_list, spacing=5, gomogen=False, pack_end=False):
- """Create and return a gtk.HBox(), containing given widgets.
- Each element of widget_list may be a widget
- or a pair (widget, expand_flag)."""
- h = gtk. HBox(gomogen,spacing)
- for wd in widget_list:
- try:
- w = wd[0]
- f = wd[1]
- except:
- w = wd
- f = False
- if pack_end:
- h.pack_end(w,f)
- else:
- h.pack_start(w,f)
- h.show()
- return h
-
-def vbox(widget_list, spacing=5, gomogen=False, pack_end=False):
- """Create and return a gtk.VBox(), containing given widgets.
- Each element of widget_list may be a widget
- or a pair (widget, expand_flag)."""
- h = gtk.VBox(gomogen,spacing)
- for wd in widget_list:
- try:
- w = wd[0]
- f = wd[1]
- except:
- w = wd
- f = False
- if pack_end:
- h.pack_end(w,f)
- else:
- h.pack_start(w,f)
- h.show()
- return h
-
-def label(text,markup=False):
- """Create and return a gtk.Label"""
- if markup:
- l = gtk.Label()
- l.set_use_markup(True)
- l.set_markup(text)
- else:
- l = gtk.Label(text)
- l.show()
- return l
-
-def entry():
- """Create and return a gtk.Entry."""
- e = gtk.Entry()
- e.show()
- return e
-
-def labeled_entry(text,markup=False):
- l = label(text,markup)
- e = entry()
- h = hbox([l,e])
- return h,e
-
-def combobox(list):
- w = gtk.combo_box_new_text()
- for item in list:
- w.append_text(item)
- w.show()
- return w
-
-def labeled_combobox(text,list,markup=False):
- l = label(text,markup)
- e = combobox(list)
- h = hbox([l,e])
- return h,e
-
-def window_on_close(window,main=False):
- """Hide given window, and if it's main, stop gtk main loop.
- You can use this function as a callback for window's "destroy" signal."""
- window.hide()
- if main:
- gtk.main_quit()
-
-def close_gui(widget,data=None):
- """Stop gtk main loop. Use this function as a callback for widgets
- such as "Close" button."""
- gtk.main_quit()
-
-def window(title=None,widget=None,onclose=window_on_close,main=False):
- """Create a gtk.Window with given title,
- and pack a widget (if any) into that window.
- Default onclose function will simply hide the window,
- and stop gtk main loop it this window is main."""
- w = gtk.Window()
- if title:
- w.set_title(title)
- w.set_border_width(10)
- if widget:
- w.add(widget)
- w.connect("destroy",onclose,main)
- w.show()
- return w
-
-def show():
- """Start the gtk main loop."""
- gtk.main()
diff --git a/gui.pyc b/gui.pyc
deleted file mode 100644
index 693c407..0000000
Binary files a/gui.pyc and /dev/null differ