├── .gitignore
├── AWN
├── DockBarX.desktop
└── DockBarX
│ └── DockBarX.py
├── CHANGELOG
├── DockX.desktop
├── GNOME_DockBarXApplet.server
├── README.md
├── Theming HOWTO
├── dbx_preference
├── dbx_preference.desktop
├── dockbarx
├── __init__.py
├── applets.py
├── cairowidgets.py
├── common.py
├── dbx_dbus.py
├── dockbar.py
├── dockmanager.py
├── groupbutton.py
├── i18n.py
├── iconfactory.py
├── log.py
├── mediabuttons.py
├── theme.py
├── unity.py
├── windowbutton.py
└── zg.py
├── dockbarx_factory
├── dockx
├── dockx_applets
├── Creating applets
├── appindicator.applet
├── appindicator.py
├── battery_status.applet
├── battery_status.py
├── cardapio.applet
├── cardapio_dbx.py
├── clock.applet
├── clock.py
├── hello_world.applet
├── hello_world.py
├── namebar.applet
├── namebar.py
├── namebar_themes
│ ├── Dust-ish.tar.gz
│ ├── Human-ish.tar.gz
│ └── New Wave-ish.tar.gz
├── namebar_window_buttons.applet
├── namebar_window_buttons.py
├── namebar_window_title.applet
├── namebar_window_title.py
├── vc-themes
│ ├── Black
│ │ ├── index.theme
│ │ └── scalable
│ │ │ ├── audio-volume-1.svg
│ │ │ ├── audio-volume-100.svg
│ │ │ ├── audio-volume-14.svg
│ │ │ ├── audio-volume-21.svg
│ │ │ ├── audio-volume-29.svg
│ │ │ ├── audio-volume-36.svg
│ │ │ ├── audio-volume-43.svg
│ │ │ ├── audio-volume-50.svg
│ │ │ ├── audio-volume-57.svg
│ │ │ ├── audio-volume-64.svg
│ │ │ ├── audio-volume-71.svg
│ │ │ ├── audio-volume-79.svg
│ │ │ ├── audio-volume-86.svg
│ │ │ ├── audio-volume-93.svg
│ │ │ └── audio-volume-muted.svg
│ └── Minimal
│ │ ├── index.theme
│ │ └── scalable
│ │ ├── audio-volume-1.svg
│ │ ├── audio-volume-100.svg
│ │ ├── audio-volume-14.svg
│ │ ├── audio-volume-21.svg
│ │ ├── audio-volume-29.svg
│ │ ├── audio-volume-36.svg
│ │ ├── audio-volume-43.svg
│ │ ├── audio-volume-50.svg
│ │ ├── audio-volume-57.svg
│ │ ├── audio-volume-64.svg
│ │ ├── audio-volume-71.svg
│ │ ├── audio-volume-79.svg
│ │ ├── audio-volume-86.svg
│ │ ├── audio-volume-93.svg
│ │ └── audio-volume-muted.svg
├── volume-control.applet
├── volume-control.py
└── volume-control.ui
├── icons
└── hicolor
│ ├── 128x128
│ └── apps
│ │ └── dockbarx.png
│ ├── 16x16
│ └── apps
│ │ └── dockbarx.png
│ ├── 22x22
│ └── apps
│ │ └── dockbarx.png
│ ├── 24x24
│ └── apps
│ │ └── dockbarx.png
│ ├── 36x36
│ └── apps
│ │ └── dockbarx.png
│ ├── 48x48
│ └── apps
│ │ └── dockbarx.png
│ ├── 64x64
│ └── apps
│ │ └── dockbarx.png
│ ├── 72x72
│ └── apps
│ │ └── dockbarx.png
│ └── 96x96
│ └── apps
│ └── dockbarx.png
├── make_translate_template.sh
├── msgfmt.py
├── po-themes
├── bg.po
├── cs.po
├── da.po
├── de.po
├── dockbarx-themes.pot
├── el.po
├── en_GB.po
├── es.po
├── eu.po
├── fi.po
├── fr.po
├── hu.po
├── it.po
├── ja.po
├── ko.po
├── lt.po
├── nl.po
├── pl.po
├── pt_BR.po
├── ro.po
├── ru.po
├── sk.po
├── sv.po
├── th.po
├── uk.po
├── zh_CN.po
└── zh_TW.po
├── po
├── ar.po
├── bg.po
├── cs.po
├── da.po
├── de.po
├── dockbarx.pot
├── el.po
├── en_GB.po
├── es.po
├── eu.po
├── fi.po
├── fr.po
├── hu.po
├── id.po
├── it.po
├── ja.po
├── ko.po
├── lt.po
├── nl.po
├── pl.po
├── pt.po
├── pt_BR.po
├── ro.po
├── ru.po
├── sk.po
├── sv.po
├── tr.po
├── uk.po
├── zh_CN.po
└── zh_TW.po
├── setup.py
└── themes
├── Colors.tar.gz
├── Deep.tar.gz
├── Glass_DMD.tar.gz
├── Magic_trans.tar.gz
├── dock
├── Colors.tar.gz
├── Glass_DMD.tar.gz
├── Magic_trans.tar.gz
├── dbx.tar.gz
├── deep.tar.gz
├── folded.tar.gz
├── glass-dock.tar.gz
└── invisible.tar.gz
├── dockxyz.tar.gz
├── glassified.tar.gz
├── popup_styles
├── Colors.tar.gz
├── DMD_Glass.tar.gz
├── Elegance.tar.gz
├── Magic_trans.tar.gz
├── Radiance.tar.gz
├── dbx.tar.gz
├── deep.tar.gz
├── gradent.tar.gz
├── old.tar.gz
└── square.tar.gz
└── sunny-c.tar.gz
/.gitignore:
--------------------------------------------------------------------------------
1 | # Byte-compiled / optimized / DLL files
2 | __pycache__/
3 | *.py[cod]
4 |
5 | # C extensions
6 | *.so
7 |
8 | # Distribution / packaging
9 | .Python
10 | env/
11 | build/
12 | develop-eggs/
13 | dist/
14 | eggs/
15 | lib/
16 | lib64/
17 | parts/
18 | sdist/
19 | var/
20 | *.egg-info/
21 | .installed.cfg
22 | *.egg
23 |
24 | # Installer logs
25 | pip-log.txt
26 | pip-delete-this-directory.txt
27 |
28 | # Unit test / coverage reports
29 | htmlcov/
30 | .tox/
31 | .coverage
32 | .cache
33 | nosetests.xml
34 | coverage.xml
35 |
--------------------------------------------------------------------------------
/AWN/DockBarX.desktop:
--------------------------------------------------------------------------------
1 |
2 | [Desktop Entry]
3 | Version=1.0
4 | Name=DockBarX
5 | Type=Application
6 | X-AWN-AppletType=Python
7 | Comment=DockBar for AWN
8 | X-AWN-AppletExec=DockBarX/DockBarX.py
9 | Exec=awn-applet -p %k
10 | Icon=dockbarx
11 | X-AWN-AppletCategory=Utility
12 | Name[sv_FI]=DockBarX
13 |
--------------------------------------------------------------------------------
/AWN/DockBarX/DockBarX.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # DockBarX.py
4 | #
5 | # Copyright 2009, 2010 Aleksey Shaferov and Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | import awn
21 | import dockbarx.dockbar
22 | from dockbarx.common import Globals
23 | import gobject
24 | import weakref
25 | import time
26 | import sys
27 | import gtk
28 | import wnck
29 | import dbus
30 | import dbus.service
31 |
32 | WNCK_WINDOW_STATE_MINIMIZED = 1
33 |
34 | class DockBarApp (awn.AppletSimple):
35 | def __init__ (self, uid, panel_id):
36 | awn.AppletSimple.__init__(self, "DockbarX", uid, panel_id)
37 | self.set_icon_name("gtk-apply")
38 | gobject.idle_add(self.__on_idle)
39 | self.db_loaded = False
40 | self.awn_applet_dbus = AWNappletDBus(self)
41 |
42 |
43 | def __on_idle(self):
44 | self.globals = Globals()
45 | self.autohide_sid = None
46 | self.should_autohide = True
47 | self.hide_inhibit_cookie = None
48 | self.geometry_time = 0
49 | self.last_geometry_window = lambda: None
50 | self.windows = weakref.WeakKeyDictionary()
51 | self.border_distances = weakref.WeakKeyDictionary()
52 | self.old_child = self.get_child()
53 | self.wnck_screen = wnck.screen_get_default()
54 | gdk_screen = gtk.gdk.screen_get_default()
55 | self.icon = self.get_icon()
56 | self.remove(self.old_child)
57 | self.alignment = gtk.Alignment()
58 | self.add(self.alignment)
59 | self.alignment.show()
60 | self.db = dockbarx.dockbar.DockBar(self)
61 | self.db.set_parent_window_reporting(True)
62 | self.db.load()
63 |
64 | # Inactive dockbarx's size overflow management
65 | self.db.set_max_size(3000)
66 |
67 | if self.get_pos_type() == gtk.POS_RIGHT:
68 | self.db.set_orient("right")
69 | self.alignment.set(1, 0, 0, 0)
70 | elif self.get_pos_type() == gtk.POS_TOP:
71 | self.db.set_orient("up")
72 | self.alignment.set(0, 0, 0, 0)
73 | elif self.get_pos_type() == gtk.POS_LEFT:
74 | self.db.set_orient("left")
75 | self.alignment.set(0, 0, 0, 0)
76 | else:
77 | self.db.set_orient("down")
78 | self.alignment.set(0, 1, 0, 0)
79 | container = self.db.get_container()
80 | if self.db.get_orient() in ("down", "up"):
81 | container.set_size_request(-1, self.get_size() + \
82 | self.icon.get_offset() + 5)
83 | else:
84 | container.set_size_request(self.get_size() + \
85 | self.icon.get_offset() + 5, -1)
86 | self.alignment.add(container)
87 | self.connect("size-changed", self.__on_size_changed)
88 | self.connect("offset-changed", self.__on_size_changed)
89 | self.connect("position-changed", self.__on_position_changed)
90 | self.globals.connect("awn-behavior-changed",
91 | self.__on_behavior_changed)
92 | container.show_all()
93 | self.show()
94 | self.wnck_screen.connect("active-window-changed",
95 | self.__on_active_window_changed)
96 | gobject.timeout_add(200, self.__update_autohide)
97 | for window in self.db.get_windows():
98 | self.add_window(window)
99 | self.db_loaded = True
100 | self.__compute_should_autohide()
101 |
102 | def __on_size_changed(self, *args):
103 | container = self.db.get_container()
104 | if self.db.get_orient() in ("down", "up"):
105 | container.set_size_request(-1, self.get_size() + \
106 | self.icon.get_offset() + 5)
107 | else:
108 | container.set_size_request(self.get_size() + \
109 | self.icon.get_offset() + 5, -1)
110 | self.__compute_should_autohide()
111 |
112 | def __on_position_changed(self, applet, position):
113 | self.alignment.remove(self.db.get_container())
114 | if self.get_pos_type() == gtk.POS_RIGHT:
115 | self.db.set_orient("right")
116 | self.alignment.set(1, 0, 0, 0)
117 | elif self.get_pos_type() == gtk.POS_TOP:
118 | self.db.set_orient("up")
119 | self.alignment.set(0, 0, 0, 0)
120 | elif self.get_pos_type() == gtk.POS_LEFT:
121 | self.db.set_orient("left")
122 | self.alignment.set(0, 0, 0, 0)
123 | else:
124 | self.db.set_orient("down")
125 | self.alignment.set(0, 1, 0, 0)
126 | container = self.db.get_container()
127 | if self.db.get_orient() in ("up", "down"):
128 | container.set_size_request(-1, self.get_size() + \
129 | self.icon.get_offset() + 5)
130 | else:
131 | container.set_size_request(self.get_size() + \
132 | self.icon.get_offset() + 5, -1)
133 | self.alignment.add(container)
134 | container.show_all()
135 | self.show()
136 | self.__compute_should_autohide()
137 |
138 | #### Autohide stuff
139 | def add_window(self, window, reset_should_autohide=True):
140 | geo_sid = window.connect("geometry-changed",
141 | self.__on_window_geometry_changed)
142 | state_sid = window.connect("state-changed",
143 | self.__on_window_state_changed)
144 | self.windows[window] = (geo_sid, state_sid)
145 | self.__calc_border_distance(window)
146 | if self.db_loaded and reset_should_autohide:
147 | self.__compute_should_autohide()
148 |
149 | def remove_window(self, window, reset_should_autohide=True, forced=False):
150 | if window in self.border_distances:
151 | del self.border_distances[window]
152 | if window in self.windows:
153 | sids = self.windows.pop(window)
154 | if sids is not None:
155 | window.disconnect(sids[0])
156 | window.disconnect(sids[1])
157 | if reset_should_autohide:
158 | self.__compute_should_autohide()
159 |
160 | def __update_autohide(self):
161 | if self.should_autohide and self.globals.shown_popup() is None:
162 | if self.hide_inhibit_cookie is not None:
163 | self.uninhibit_autohide(self.hide_inhibit_cookie)
164 | self.hide_inhibit_cookie = None
165 | else:
166 | if self.hide_inhibit_cookie is None:
167 | self.hide_inhibit_cookie = self.inhibit_autohide(
168 | "dbx intellihide")
169 | return True
170 |
171 | def __on_window_state_changed(self, wnck_window,changed_mask, new_state):
172 | if WNCK_WINDOW_STATE_MINIMIZED & changed_mask:
173 | self.__compute_should_autohide()
174 |
175 | def __on_window_geometry_changed(self, window):
176 | if time.time() - self.geometry_time < 0.12 and \
177 | window == self.last_geometry_window():
178 | # Same window get multiple calls when the geometry changes
179 | # In that case, just return.
180 | return
181 | self.last_geometry_window = weakref.ref(window)
182 | self.geometry_time = time.time()
183 | gobject.timeout_add(120, self.__calc_border_distance, window, True)
184 |
185 | def __on_active_window_changed(self, screen, previous_active_window):
186 | if self.globals.settings["awn/behavior"] == "dodge active window":
187 | self.__compute_should_autohide()
188 |
189 | def __on_behavior_changed(self, *args):
190 | self.__compute_should_autohide()
191 |
192 | def __calc_border_distance(self, window, reset_should_autohide=False):
193 | bd = {"left": 1000, "right": 1000, "top": 1000, "bottom": 1000}
194 | x, y, w, h = window.get_geometry()
195 | gdk_screen = gtk.gdk.screen_get_default()
196 | monitor = gdk_screen.get_monitor_at_point(x + (w / 2), y + (h / 2))
197 | if monitor != self.get_monitor():
198 | return
199 | mx, my, mw, mh = self.get_monitor_geometry()
200 | if y < my + mh and y + h > my:
201 | if x + w > mx:
202 | bd["left"] = x - mx
203 | if x < mx + mw:
204 | bd["right"] = mx + mw - x - w
205 | if x < mx + mw and x + w > mx:
206 | if y + h > my:
207 | bd["top"] = y - my
208 | if y < my + mh:
209 | bd["bottom"] = my + mh - y - h
210 | self.border_distances[window] = bd
211 | if reset_should_autohide:
212 | self.__compute_should_autohide()
213 |
214 | def __compute_should_autohide(self):
215 | pos = ("left", "right", "top", "bottom")[self.get_pos_type()]
216 | size = self.get_size() + self.icon.get_offset() + 2
217 | self.behavior = self.globals.settings["awn/behavior"]
218 | if not self.behavior in ("dodge windows", "dodge active window"):
219 | self.should_autohide = True
220 | return True
221 | self.should_autohide = False
222 | active_workspace = self.wnck_screen.get_active_workspace()
223 | for window in self.db.get_windows():
224 | if window.is_minimized():
225 | continue
226 | if self.behavior == "dodge active window" and \
227 | not window.is_active():
228 | continue
229 | if window.get_workspace() != active_workspace:
230 | continue
231 | border_distance = self.border_distances.get(window)
232 | if border_distance is None:
233 | continue
234 | if border_distance[pos] < size:
235 | self.should_autohide = True
236 | break
237 | return self.should_autohide
238 |
239 | def get_monitor(self):
240 | screen = self.get_screen()
241 | if screen is None:
242 | screen = gtk.gdk.screen_get_default()
243 | return screen.get_monitor_at_window(self.window)
244 |
245 | def get_monitor_geometry(self):
246 | screen = self.get_screen()
247 | if screen is None:
248 | screen = gtk.gdk.screen_get_default()
249 | monitor = screen.get_monitor_at_window(self.window)
250 | return screen.get_monitor_geometry(monitor)
251 |
252 | def reload(self=None):
253 | self.db_loaded = False
254 | self.db.reload()
255 | self.db_loaded = True
256 |
257 | def readd_container(self, container):
258 | # Dockbar calls back to this function when it is reloaded
259 | if self.db.get_orient() in ("up", "down"):
260 | container.set_size_request(-1, self.get_size() + \
261 | self.icon.get_offset() + 5)
262 | else:
263 | container.set_size_request(self.get_size() + \
264 | self.icon.get_offset() + 5, -1)
265 | self.alignment.add(container)
266 | container.show_all()
267 | self.__compute_should_autohide()
268 |
269 |
270 |
271 | class AWNappletDBus(dbus.service.Object):
272 |
273 | def __init__(self, applet):
274 | self.bus_name = "org.dockbar.AWNapplet"
275 | if "org.dockbar.AWNapp" in dbus.SessionBus().list_names():
276 | for n in range(1, 100):
277 | name = "org.dockbar.AWNapplet%s" % n
278 | if not name in dbus.SessionBus().list_names():
279 | self.bus_name = name
280 | break
281 | self.applet_r = weakref.ref(applet)
282 | bus_name = dbus.service.BusName(self.bus_name,
283 | bus = dbus.SessionBus())
284 | dbus.service.Object.__init__(self, bus_name,
285 | "/org/dockbar/AWNapplet")
286 |
287 | @dbus.service.method(dbus_interface="org.dockbar.AWNapplet",
288 | in_signature="", out_signature="",)
289 | def Reload(self):
290 | self.applet().reload()
291 |
292 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
293 | in_signature='ss', out_signature='v')
294 | def Get(self, interface_name, property_name):
295 | return self.GetAll(interface_name)[property_name]
296 |
297 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
298 | in_signature='s', out_signature='a{sv}')
299 | def GetAll(self, interface_name):
300 | if interface_name == "org.dockbar.AWNapplet":
301 | return {}
302 | else:
303 | raise dbus.exceptions.DBusException(
304 | 'com.example.UnknownInterface',
305 | 'The Foo object does not implement the %s interface'
306 | % interface_name)
307 |
308 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
309 | in_signature='ssv', out_signature='')
310 | def Set(self, interface_name, property_name, property_value):
311 | pass
312 |
313 | @dbus.service.signal(dbus_interface=dbus.PROPERTIES_IFACE,
314 | signature='sa{sv}as')
315 | def PropertiesChanged(self, interface_name, changed_properties,
316 | invalidated_properties):
317 | pass
318 |
319 | if __name__ == "__main__":
320 | awn.init(sys.argv[1:])
321 | applet = DockBarApp(awn.uid, awn.panel_id)
322 | awn.embed_applet(applet)
323 | applet.show_all()
324 | gtk.main()
325 |
--------------------------------------------------------------------------------
/DockX.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Name=DockX
3 | GenericName=Dock for DockbarX
4 | Comment=Stand-alone dock for DockbarX
5 | Exec=dockx
6 | Icon=dockbarx
7 | Terminal=false
8 | Type=Application
9 | Categories=Utility;
10 | Name[sv]=DockX
11 |
--------------------------------------------------------------------------------
/GNOME_DockBarXApplet.server:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # DockbarX
2 | ### Version 0.93
3 |
4 | ## About DockbarX
5 | DockBarX is a lightweight taskbar / panel replacement for Linux which works as a stand-alone dock (called DockX), as an an Avant Window Navigator applet, as a Xfce4 panel applet[^1], as a matepanel applet[^2] or as a legacy gnome2 panel applet. DockbarX is a fork of dockbar made by Aleksey Shaferov. DockbarX branch is developed by Matias Särs.
6 |
7 | DockbarX is free software and is licensed under GPL3.
8 |
9 | ## Install in Ubuntu from ppa
10 | The main DockbarX ppa is not maintained for the moment. You can use Xu Zhen's unofficial DockbarX ppa instead. To add the ppa and install the application in Ubuntu (and derivatives), use the following commands:
11 |
12 | ```
13 | sudo add-apt-repository ppa:xuzhen666/dockbarx
14 | sudo apt-get update
15 | sudo apt-get install dockbarx
16 | ```
17 |
18 | If you want to use dockbarx as a Xfce panel applet you also need this command
19 |
20 | ```
21 | sudo apt-get install xfce4-dockbarx-plugin
22 | ```
23 |
24 | To get more themes for DockbarX and DockX use this command
25 |
26 | ```
27 | sudo apt-get install dockbarx-themes-extra
28 | ```
29 |
30 | ## Install in archlinux
31 | There is an aur for DockbarX
32 |
33 | https://aur.archlinux.org/packages/dockbarx/
34 |
35 | And there is also one for xfce4-dockbarx-plugin
36 |
37 | https://aur.archlinux.org/packages/xfce4-dockbarx-plugin/
38 |
39 | ## Manual Installation
40 |
41 | 1. Following dependecies needs to be installed:
42 | - zeitgeist, python-wnck, python-imaging, python-keybinder and python-xlib.
43 | - Install python-gnomeapplet if you want to use DockbarX as a gnome-panel applet (gnome2) you should install python-gnomeapplet. (This doesn't work in newer releases of Ubuntu.)
44 | - To use dockbarx as an AWN applet, you also need to copy the content of the AWN folder to ~/.config/awn/applets.
45 | - Some of the stand alone dock applets require dependencies:
46 | - Cardapio applet: Cardapio
47 | - Appindicators: indicator-application
48 | - To use DockManager helpers, you need to install dockmanager and dockmanager-daemon as well as libdesktop-agnostic-cfg-gconf and libdesktop-agnostic-vfs-gio. The last two might not need to be installed separately on distributions that aren't Debian based.
49 | 2. Extract dockbarx. Change directory to where you extracted dockbarx and run the setup.py install `$ sudo ./setup.py install`
50 |
51 | ## Usage
52 | To start DockbarX you can
53 | - To run DockbarX as a stand alone dock use the command `dockx`.
54 | - For gnomepanel or matepanel applet, simply add DockBarX applet to the panel (kill the panel or re-login first if necessary).
55 | - For XFCE panel you need to [xfce-dockbarx-plugin] (https://github.com/TiZ-EX1/xfce4-dockbarx-plugin), if you haven't installed it already. Click the link for further usage information.
56 |
57 | The preferences dialog of DockbarX can be found from your applications menu or (if you use DockX or mate-/xfce-/gnome-applet) by right clicking and choosing Preferences.
58 |
59 | **NOTE!** To use previews with Compiz you need to activate KDE Compability in compiz settings manager and under KDE Compability check "Support Plasma Thumbnails". *You can **not** use previews with other window manager than Compiz and Kwin.*
60 |
61 | ## Contribute
62 | DockbarX is a free and open source project I am developing in my free time. I will gladly accept any help I can get to improve DockbarX. Test out new code, **report bugs** to the issue tracker and make pull request with code you like to contribute.
63 |
64 | You can also translate DockbarX into your language at [DockbarX launchpad translation page](https://translations.launchpad.net/dockbar). DockbarX is translated into many languages but few of the translations are complete. Even if DockbarX should be fully translated into your language at the moment, you could check in after a new release is out to see if there some new words that needs translating.
65 |
66 | ##FAQ
67 | *Q: Why do you want to make Linux into a Microsoft Windows 7 clone?*
68 |
69 | A: I don't. The goal of DockbarX isn't to be a clone of the Windows 7 task bar. Windows 7 task bar has a good principle, though. When it comes to your most used programs it's more productive to do all window handling - launching, selecting, closing, etc. from the same few pixels. If I need a Firefox window I move my mouse cursor to the same spot on the screen regardless of which Firefox window I want and or if I even have not opened a Firefox window yet. This behavior is good and it would be stupid not to implement it just because "Windows had it first". Don't reduce your productivity out of stubbornness. When it comes to looks it's up to you to choose a theme that looks like windows 7 or a theme that doesn't look that way.
70 |
71 | Here are some historical references about docks:
72 |
73 | http://en.wikipedia.org/wiki/Dock_(computing)
74 | http://en.wikipedia.org/wiki/Icon_bar
75 |
76 | And another interesting link that has had quite a bit of infuence on my work with DockbarX:
77 | http://arstechnica.com/software/news/2009/01/dock-and-windows-7-taskbar.ars
78 |
79 | *Q: I want a button for every window instead of all windows of the same application grouped together under one button. When will DockbarX support that?*
80 |
81 | A: Never. That would demand quite a bit of restructuring of the code and I believe it's less productive to keep the windows ungrouped. You are welcome to change the code yourself if you don't like my decision, or try the applet Talika it might suit your needs better than DockbarX does.
82 |
83 | *Q: I added a new launcher for program X but when I click on the launcher a new groupbutton is made for the window instead of using the groupbutton of the launcher. What went wrong?*
84 |
85 | A: Dockbarx connects group buttons and windows by using the resource class name of the application. When a launcher is added dockbarx tries to guess the resource class name of that launcher. This works in most cases but not always. Apparently it didn't work for your program X. To fix this, right click on the launcher for program X and choose "Edit Resource name" and enter the correct resource name. If the program is already running you should be able to find it's resource class name in the drop-down list.
86 |
87 | *Q: There is no menu option to pin program X, but there is one for program Y and Z. Why?*
88 | A: Dockbarx wasn't able to identify program X correctly then. You can "pin" the program by dragging it's icon from the gnome menu instead. Oh, and you will probably have to enter the resource name manually as well (see previous question).
89 |
90 | *Q: How do I get to preference dialog?*
91 |
92 | A: Right click the handle (the dots or lines to the left of dockbarx) to get a menu where you can choose the preference option. Sometimes though, you have to double right click the handle to get the menu. Don't ask me why - just do it. You can also find the preference dialog from gnome menu (in Accessories).
93 |
94 | *Q: None of DockbarX's compiz stuff like "compiz scale" work. Why?*
95 |
96 | A: Make sure you enable the GLib extension in Compiz settings manager and that the compiz plugin dockbarx uses is activated as well. (eg. for group button action "compiz scale" to work you need the scale plugin activated)
97 |
98 | *Q: Opacify doen't work?*
99 |
100 | A: A common misunderstanding is that opacify should have something to do with transparency of dockbarx itself, it doesn't. Opacify is a way to find localize a window with dockbar. When opacify is on and you roll over a name in the window list with the mouse, all other windows will become transparent so that you easy can spot the window.
101 |
102 | *Q: How do I install a theme?*
103 |
104 | A: If you find a theme on the web that you like, copy the file (should be SOMETHING.tar.gz) to ~/.dockbarx/themes or /usr/share/dockbarx/themes. You change themes in the appearance tab of preference dialog. You might need to press the reload button before your newly installed theme shows up.
105 |
106 | *Q: How can I make an theme of my own?*
107 |
108 | A: Read Theming HOWTO. If you need help ask me (Matias Särs alias M7S) on gnome-look or at launchpad. I'm happy to help theme developers as much as I can.
109 |
110 | *Q: How can I backup and restore all preferences to move my settings to another linux setup.*
111 | A: backup: gconftool --dump /apps/dockbarx > dockbarx.xml
112 | restore: gconftool --load dockbarx.xml
113 | and don't forget to copy ~/.dockbarx
114 |
115 | ### AWN questions
116 | *Q: When I use dockbarx in AWN, IntelliHide and Window Dodge behaviors doesn't work. Why? Can I do anything about it?*
117 |
118 | A: For IntelliHide and Window Dodge to work, AWN Taskmanager applet has to be activated. So to get back IntelliHide or Window Dodge, simply add Taskmanager to your applet list again. If you think using Taskmanager and DockbarX at the same time looks a bit weird, you can go to the Task Manager tab of AWN preference and check the option "Display launchers only" and then remove all the launchers in the list. That will give you a completely invisible Taskmanager that will make sure IntelliHide and Window Dodge works as they should.
119 |
120 | [^1]: Using [xfce-dockbarx-plugin] (https://github.com/TiZ-EX1/xfce4-dockbarx-plugin)
121 |
122 | [^2]: DockbarX doesn't work in mate 1.6 and later at the moment.
123 |
124 |
125 |
126 |
127 |
--------------------------------------------------------------------------------
/dbx_preference.desktop:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Name=DockbarX Preference
3 | GenericName=Preference Dialog
4 | Comment=Preference dialog for DockbarX
5 | Exec=dbx_preference
6 | Icon=dockbarx
7 | Terminal=false
8 | Type=Application
9 | Categories=Utility;
10 | GenericName[sv]=Preferences Dialog
11 |
--------------------------------------------------------------------------------
/dockbarx/__init__.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | __all__ = ["dockbar",
4 | "groupbutton",
5 | "windowbutton",
6 | "cairowidgets",
7 | "icon_factory",
8 | "theme",
9 | "common",
10 | "i18n",
11 | "mediabuttons",
12 | "zg"]
13 |
--------------------------------------------------------------------------------
/dockbarx/applets.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # DockbarX applets
4 | #
5 | # Copyright 2011 Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see = len(lines):
113 | text = "Applet %s in file %s has no description" % (name, path)
114 | return None, text
115 | settings["description"] = "\n".join(lines[description_nr:])
116 | return settings, None
117 |
118 | def get(self, name):
119 | e = self.applets[name]["exec"]
120 | iname, ext = os.path.splitext(os.path.split(e)[-1])
121 | path = os.path.join(self.applets[name]["dir"], e)
122 | try:
123 | applet = imp.load_source(iname, path)
124 | except:
125 | message = "Error: Could not load applet from %s. " % path
126 | message += "Could not import the script."
127 | logger.exception(message)
128 | return
129 | return applet
130 |
131 | def get_description(self, name):
132 | try:
133 | return self.applets[name]["description"]
134 | except:
135 | return ""
136 |
137 | def get_list(self):
138 | try:
139 | old_list = GCONF_CLIENT.get_list(GCONF_DIR + \
140 | "/applets/applet_list",
141 | gconf.VALUE_STRING)
142 | except:
143 | raise
144 | GCONF_CLIENT.set_list(GCONF_DIR + "/applets/applet_list",
145 | gconf.VALUE_STRING,
146 | ["DockbarX"])
147 | return ["DockbarX"]
148 | all_applets = self.applets.keys() + ["DockbarX", "Spacer"]
149 | applet_list = [a for a in old_list if a in all_applets]
150 | if not "DockbarX" in applet_list:
151 | applet_list.append("DockbarX")
152 | if applet_list != old_list:
153 | GCONF_CLIENT.set_list(GCONF_DIR + "/applets/applet_list",
154 | gconf.VALUE_STRING,
155 | applet_list)
156 | return applet_list
157 |
158 | def get_unused_list(self):
159 | try:
160 | applet_list = GCONF_CLIENT.get_list(GCONF_DIR + \
161 | "/applets/applet_list",
162 | gconf.VALUE_STRING)
163 | except:
164 | GCONF_CLIENT.set_list(GCONF_DIR + "/applets/applet_list",
165 | gconf.VALUE_STRING,
166 | ["DockbarX"])
167 | applet_list = ["DockbarX"]
168 | all_applets = self.applets.keys()
169 | unused_applets = [a for a in all_applets if a not in applet_list]
170 | # There should be totally two spacers.
171 | while (unused_applets + applet_list).count("Spacer") < 2:
172 | unused_applets.append("Spacer")
173 | return unused_applets
174 |
175 |
176 | def set_list(self, applet_list):
177 | all_applets = self.applets.keys() + ["DockbarX", "Spacer"]
178 | applet_list = [a for a in applet_list if a in all_applets]
179 | if not "DockbarX" in applet_list:
180 | applet_list.append("DockbarX")
181 | GCONF_CLIENT.set_list(GCONF_DIR+"/applets/applet_list",
182 | gconf.VALUE_STRING,
183 | applet_list)
184 |
185 | # Functions used by both DockXApplet and DockXAppletDialog
186 | def set_setting(key, value, list_type=None, applet_name=None):
187 | if applet_name is None:
188 | return
189 | gdir = "%s/applets/%s" % (GCONF_DIR, applet_name)
190 | gconf_set = { str: GCONF_CLIENT.set_string,
191 | bool: GCONF_CLIENT.set_bool,
192 | float: GCONF_CLIENT.set_float,
193 | int: GCONF_CLIENT.set_int }
194 | if type(value) == list:
195 | list_types = { str: gconf.VALUE_STRING,
196 | bool: gconf.VALUE_BOOL,
197 | float: gconf.VALUE_FLOAT,
198 | int: gconf.VALUE_INT }
199 | if len(value) == 0:
200 | if type(list_type) in list_types:
201 | lt = list_types[type(list_type)]
202 | else:
203 | lt = GCONF_CLIENT.set_string
204 | else:
205 | for v in values:
206 | if v != value[0]:
207 | raise ValueError(
208 | "All values in the list must be of the same sort")
209 | lt = list_types[type(value[0])]
210 | GCONF_CLIENT.set_list(GCONF_DIR + "/applets/applet_list",
211 | list_types, VALUE)
212 |
213 | else:
214 | if type(value) not in gconf_set:
215 | raise ValueError(
216 | "The value must be a string, bool, int or list")
217 | gconf_set[type(value)]("%s/%s" % (gdir, key), value)
218 |
219 |
220 | def get_setting(key, default=None, applet_name=None):
221 | if applet_name is None:
222 | return
223 | gdir = "%s/applets/%s" % (GCONF_DIR, applet_name)
224 | try:
225 | value = GCONF_CLIENT.get_value("%s/%s" % (gdir, key))
226 | except:
227 | if default is not None:
228 | set_setting(key, default, applet_name=applet_name)
229 | return default
230 | return value
231 |
232 |
233 | def get_value(value):
234 | if value.type == gconf.VALUE_LIST:
235 | return [get_value(item) for item in value.get_list()]
236 | else:
237 | return {
238 | "string": value.get_string,
239 | "int": value.get_int,
240 | "float": value.get_float,
241 | "bool": value.get_bool,
242 | "list": value.get_list
243 | }[value.type.value_nick]()
244 |
245 | class DockXApplet(gtk.EventBox):
246 | """This is the base class for DockX applets"""
247 |
248 | __gsignals__ = {"clicked": (gobject.SIGNAL_RUN_FIRST,
249 | gobject.TYPE_NONE,(gtk.gdk.Event, )),
250 | "enter-notify-event": "override",
251 | "leave-notify-event": "override",
252 | "button-release-event": "override",
253 | "button-press-event": "override"}
254 |
255 | def __init__(self, dbx_dict):
256 | self.dockx_r = weakref.ref(dbx_dict["dock"])
257 | self.APPLET_NAME = dbx_dict["name"].lower().replace(" ", "")
258 | gtk.EventBox.__init__(self)
259 | self.set_visible_window(False)
260 | self.set_no_show_all(True)
261 | self.mouse_pressed = False
262 | self.expand = False
263 | # Set gconf notifiers
264 | gdir = "%s/applets/%s" % (GCONF_DIR, self.APPLET_NAME)
265 | GCONF_CLIENT.add_dir(gdir, gconf.CLIENT_PRELOAD_NONE)
266 | GCONF_CLIENT.notify_add(gdir, self.__on_gconf_changed, None)
267 |
268 | def get_setting(self, *args, **kwargs):
269 | kwargs["applet_name"]=self.APPLET_NAME
270 | return get_setting(*args, **kwargs)
271 |
272 | def set_setting(self, *args, **kwargs):
273 | kwargs["applet_name"]=self.APPLET_NAME
274 | return set_setting(*args, **kwargs)
275 |
276 | def on_setting_changed(self, key, value):
277 | # Method to be overridden by applet.
278 | pass
279 |
280 | def __on_gconf_changed(self, client, par2, entry, par4):
281 | if entry.get_value() is None:
282 | return
283 | key = entry.get_key().split("/")[-1]
284 | value = get_value(entry.get_value())
285 | self.on_setting_changed(key, value)
286 |
287 | def update(self):
288 | # Method to be overriden by applet.
289 | pass
290 |
291 | def get_full_size(self):
292 | if self.dockx_r:
293 | dockx = self.dockx_r()
294 | rel_size = float(dockx.theme.get("rel_size", 100))
295 | size = dockx.globals.settings["dock/size"]
296 | return max(size, int(size * rel_size / 100))
297 |
298 |
299 | def get_size(self):
300 | if self.dockx_r:
301 | return self.dockx_r().globals.settings["dock/size"]
302 |
303 | def get_position(self):
304 | if self.dockx_r:
305 | return self.dockx_r().globals.settings["dock/position"]
306 |
307 | def get_monitor(self):
308 | if self.dockx_r:
309 | return self.dockx_r().monitor
310 |
311 | def get_expand(self):
312 | return self.expand
313 |
314 | def get_applet_size(self):
315 | if not self.dockx_r:
316 | return 0
317 | if not self.get_visible():
318 | return 0
319 | if self.get_position() in ("top", "bottom"):
320 | return self.get_allocation().width
321 | else:
322 | return self.get_allocation().height
323 |
324 | def set_expand(self, expand):
325 | self.expand = expand
326 |
327 | def do_button_release_event(self, event):
328 | if self.mousepressed:
329 | self.emit("clicked", event)
330 | self.mousepressed=False
331 |
332 | def do_button_press_event(self, event):
333 | self.mousepressed = True
334 |
335 | def do_leave_notify_event(self, *args):
336 | self.mousepressed = False
337 |
338 | def do_enter_notify_event(self, *args):
339 | pass
340 |
341 |
342 | class DockXAppletDialog(gtk.Dialog):
343 | Title = "Applet Preferences"
344 | def __init__(self, name, t=None, flags=0,
345 | buttons=(gtk.STOCK_CLOSE, gtk.RESPONSE_CLOSE)):
346 | if not name:
347 | logger.error("Error: DockXAppletDialog can't be initialized" \
348 | "without a name as it's first argument")
349 | self.APPLET_NAME = name.lower().replace(" ", "")
350 | if t is None:
351 | t = self.Title
352 | gtk.Dialog.__init__(self, _(t), None, flags, buttons)
353 |
354 | def get_setting(self, *args, **kwargs):
355 | kwargs["applet_name"]=self.APPLET_NAME
356 | return get_setting(*args, **kwargs)
357 |
358 | def set_setting(self, *args, **kwargs):
359 | kwargs["applet_name"]=self.APPLET_NAME
360 | return set_setting(*args, **kwargs)
361 |
--------------------------------------------------------------------------------
/dockbarx/dbx_dbus.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # dockbar.py
4 | #
5 | # Copyright 2008, 2009, 2010 Aleksey Shaferov and Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | import dbus
21 | import dbus.service
22 | import weakref
23 |
24 | class DockbarDBus(dbus.service.Object):
25 | def __init__(self, dockbar):
26 | self.bus_name = "org.dockbar.DockbarX"
27 | if "org.dockbar.DockbarX" in dbus.SessionBus().list_names():
28 | for n in range(1, 100):
29 | name = "org.dockbar.DockbarX%s" % n
30 | if not name in dbus.SessionBus().list_names():
31 | self.bus_name = name
32 | break
33 | self.dockbar_r = weakref.ref(dockbar)
34 | bus_name = dbus.service.BusName(self.bus_name,
35 | bus = dbus.SessionBus())
36 | dbus.service.Object.__init__(self, bus_name,
37 | "/org/dockbar/DockbarX")
38 |
39 | @dbus.service.method(dbus_interface="org.dockbar.DockbarX",
40 | in_signature="", out_signature="",)
41 | def Reload(self):
42 | dockbar = self.dockbar_r()
43 | if not dockbar.no_dbus_reload:
44 | dockbar.reload()
45 |
46 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
47 | in_signature='ss', out_signature='v')
48 | def Get(self, interface_name, property_name):
49 | return self.GetAll(interface_name)[property_name]
50 |
51 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
52 | in_signature='s', out_signature='a{sv}')
53 | def GetAll(self, interface_name):
54 | if interface_name == "org.dockbar.DockbarX":
55 | return {}
56 | else:
57 | raise dbus.exceptions.DBusException(
58 | 'com.example.UnknownInterface',
59 | 'The Foo object does not implement the %s interface'
60 | % interface_name)
61 |
62 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
63 | in_signature='ssv', out_signature='')
64 | def Set(self, interface_name, property_name, property_value):
65 | pass
66 |
67 | @dbus.service.signal(dbus_interface=dbus.PROPERTIES_IFACE,
68 | signature='sa{sv}as')
69 | def PropertiesChanged(self, interface_name, changed_properties,
70 | invalidated_properties):
71 | pass
72 |
--------------------------------------------------------------------------------
/dockbarx/dockmanager.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # dockbar.py
4 | #
5 | # Copyright 2008, 2009, 2010 Aleksey Shaferov and Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | import weakref
21 | import dbus
22 | import dbus.service
23 |
24 | from common import ODict, Globals
25 | from log import logger
26 |
27 | class DockManager(dbus.service.Object):
28 | def __new__(cls, dockbar):
29 | if "net.launchpad.DockManager" in dbus.SessionBus().list_names():
30 | logger.debug("Name net.launchpad.DockManager is already" + \
31 | " in use. (This instance of) DockbarX will" + \
32 | " not use DockManager.")
33 | return None
34 | else:
35 | return dbus.service.Object.__new__(cls)
36 |
37 | def __init__(self, dockbar):
38 | self.dockbar_r = weakref.ref(dockbar)
39 | bus_name = dbus.service.BusName("net.launchpad.DockManager",
40 | bus = dbus.SessionBus())
41 | dbus.service.Object.__init__(self, bus_name,
42 | "/net/launchpad/DockManager")
43 | self.globals = Globals()
44 |
45 |
46 | @dbus.service.method(dbus_interface="net.launchpad.DockManager",
47 | in_signature="", out_signature="as",)
48 | def GetCapabilities(self):
49 | capabilities = ["menu-item-container-title",
50 | "menu-item-icon-file",
51 | "menu-item-icon-name",
52 | "menu-item-with-label",
53 | "dock-item-badge",
54 | "dock-item-progress"]
55 | return capabilities
56 |
57 | @dbus.service.method(dbus_interface="net.launchpad.DockManager",
58 | in_signature="", out_signature="ao",)
59 | def GetItems(self):
60 | path_list = []
61 | for path in self.dockbar_r().get_dm_paths():
62 | path_list.append(dbus.ObjectPath(path))
63 | return path_list
64 |
65 | @dbus.service.method(dbus_interface="net.launchpad.DockManager",
66 | in_signature="s", out_signature="ao",)
67 | def GetItemsByDesktopFile(self, name):
68 | path_list = []
69 | for path in self.dockbar_r().get_dm_paths_by_desktop_file(name):
70 | path_list.append(dbus.ObjectPath(path))
71 | logger.debug("Items gotten by dekstop file: %s" % path_list)
72 | return path_list
73 |
74 | @dbus.service.method(dbus_interface="net.launchpad.DockManager",
75 | in_signature="s", out_signature="ao",)
76 | def GetItemsByName(self, name):
77 | path_list = []
78 | for path in self.dockbar_r().get_dm_paths_by_name(name):
79 | path_list.append(dbus.ObjectPath(path))
80 | logger.debug("Items gotten by name: %s" % path_list)
81 | return path_list
82 |
83 | @dbus.service.method(dbus_interface="net.launchpad.DockManager",
84 | in_signature="i", out_signature="ao",)
85 | def GetItemsByPid(self, pid):
86 | path_list = []
87 | for path in self.dockbar_r().get_dm_paths_by_pid(pid):
88 | path_list.append(dbus.ObjectPath(path))
89 | logger.debug("Items gotten by pid: %s" % path_list)
90 | return path_list
91 |
92 | @dbus.service.method(dbus_interface="net.launchpad.DockManager",
93 | in_signature="x", out_signature="ao",)
94 | def GetItemsByXid(self, xid):
95 | path_list = []
96 | for path in self.dockbar_r().get_dm_paths_by_xid(xid):
97 | path_list.append(dbus.ObjectPath(path))
98 | logger.debug("Items gotten by xid: %s" % path_list)
99 | return path_list
100 |
101 | @dbus.service.signal(dbus_interface='net.launchpad.DockManager',
102 | signature='o')
103 | def ItemAdded(self, obj_path):
104 | pass
105 |
106 | @dbus.service.signal(dbus_interface='net.launchpad.DockManager',
107 | signature='o')
108 | def ItemRemoved(self, obj_path):
109 | pass
110 |
111 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
112 | in_signature='ss', out_signature='v')
113 | def Get(self, interface_name, property_name):
114 | return self.GetAll(interface_name)[property_name]
115 |
116 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
117 | in_signature='s', out_signature='a{sv}')
118 | def GetAll(self, interface_name):
119 | if interface_name == "net.launchpad.DockManager":
120 | return {}
121 | else:
122 | raise dbus.exceptions.DBusException(
123 | 'com.example.UnknownInterface',
124 | 'The Foo object does not implement the %s interface'
125 | % interface_name)
126 |
127 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
128 | in_signature='ssv', out_signature='')
129 | def Set(self, interface_name, property_name, property_value):
130 | pass
131 |
132 | @dbus.service.signal(dbus_interface=dbus.PROPERTIES_IFACE,
133 | signature='sa{sv}as')
134 | def PropertiesChanged(self, interface_name, changed_properties,
135 | invalidated_properties):
136 | pass
137 |
138 | def reset(self):
139 | try:
140 | bus = dbus.SessionBus()
141 | proxy = bus.get_object("net.launchpad.DockManager.Daemon",
142 | "/net/launchpad/DockManager/Daemon")
143 | proxy.RestartAll(dbus_interface="net.launchpad.DockManager.Daemon")
144 | except:
145 | logger.exception("Restarting DockManager Helpers failed.")
146 |
147 | def remove(self):
148 | self.remove_from_connection()
149 | self.globals.disconnect(self.badge_sid)
150 |
151 | class DockManagerItem(dbus.service.Object):
152 | counter = 0
153 | def __init__(self, groupbutton):
154 | self.groupbutton_r = weakref.ref(groupbutton)
155 | self.menu_counter = 0
156 | self.menu_items = ODict()
157 | self.globals = Globals()
158 |
159 | DockManagerItem.counter += 1
160 | self.obj_path = "/net/launchpad/DockManager/Item" + \
161 | str(DockManagerItem.counter)
162 | bus_name = dbus.service.BusName("net.launchpad.DockManager",
163 | bus = dbus.SessionBus())
164 | dbus.service.Object.__init__(self, bus_name, self.obj_path)
165 |
166 | @dbus.service.method(dbus_interface="net.launchpad.DockItem",
167 | in_signature="a{sv}", out_signature="i")
168 | def AddMenuItem(self, properties):
169 | self.menu_counter += 1
170 | id = self.menu_counter
171 | self.menu_items[id] = dict(properties)
172 | return id
173 |
174 | @dbus.service.method(dbus_interface="net.launchpad.DockItem",
175 | in_signature="i", out_signature="")
176 | def RemoveMenuItem(self, id):
177 | try:
178 | del self.menu_items[id]
179 | except KeyError:
180 | pass
181 |
182 | @dbus.service.method(dbus_interface="net.launchpad.DockItem",
183 | in_signature="a{sv}", out_signature="")
184 | def UpdateDockItem(self, properties):
185 | group = groupbutton_r()
186 | if "bagde" in properties:
187 | group.button.set_badge(properties["badge"], backend="dockmanager")
188 | if "progress" in properties:
189 | progress = float(properties["progress"])/100
190 | group.button.set_progress_bar(progress, backend="dockmanager")
191 | if "attention" in properties:
192 | group.dm_attention = properties["attention"]
193 | if group.needs_attention != group.dm_attention:
194 | group.needs_attention_changed()
195 |
196 | @dbus.service.signal(dbus_interface='net.launchpad.DockItem',
197 | signature='i')
198 | def MenuItemActivated(self, id):
199 | pass
200 |
201 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
202 | in_signature='ss', out_signature='v')
203 | def Get(self, interface, propname):
204 | return self.GetAll(interface)[propname]
205 |
206 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
207 | in_signature='s', out_signature='a{sv}')
208 | def GetAll(self, interface):
209 | if interface == "net.launchpad.DockItem":
210 | path = self.groupbutton_r().get_desktop_entry_file_name()
211 | return { 'DesktopFile': path,
212 | 'Uri': ''
213 | }
214 | else:
215 | raise dbus.exceptions.DBusException(
216 | 'com.example.UnknownInterface',
217 | 'The Foo object does not implement the %s interface'
218 | % interface)
219 |
220 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
221 | in_signature='ssv', out_signature='')
222 | def Set(self, interface, propname, value):
223 | pass
224 |
225 | @dbus.service.signal(dbus_interface=dbus.PROPERTIES_IFACE,
226 | signature='sa{sv}as')
227 | def PropertiesChanged(self, interface_name, changed_properties,
228 | invalidated_properties):
229 | pass
230 |
231 | def get_path(self):
232 | return self.obj_path
233 |
234 | def get_menu_items(self):
235 | return self.menu_items
236 |
237 | def remove(self):
238 | self.groupbutton_r().button.set_badge(None, backend="dockmanager")
239 | self.groupbutton_r().button.set_progress_bar(None,
240 | backend="dockmanager")
241 | self.remove_from_connection()
242 |
--------------------------------------------------------------------------------
/dockbarx/i18n.py:
--------------------------------------------------------------------------------
1 | import os, sys
2 | import locale
3 | import gettext
4 |
5 |
6 |
7 | APP_NAME = "dockbarx"
8 |
9 |
10 | APP_DIR = os.path.join (sys.prefix,
11 | "share")
12 | LOCALE_DIR = os.path.join(APP_DIR, "locale")
13 |
14 | mo_location = LOCALE_DIR
15 |
16 |
17 | gettext.install (True)
18 |
19 | gettext.bindtextdomain (APP_NAME,
20 | mo_location)
21 | gettext.textdomain (APP_NAME)
22 | language = gettext.translation (APP_NAME,
23 | mo_location,
24 | fallback = True)
25 |
26 |
27 |
28 | theme = None
29 |
30 | def load_theme_translation():
31 | global theme
32 | gettext.bindtextdomain("dockbarx-themes", mo_location)
33 | theme = gettext.translation("dockbarx-themes",
34 | mo_location,
35 | fallback = True)
36 |
--------------------------------------------------------------------------------
/dockbarx/log.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # log.py
4 | #
5 | # Copyright 2008, 2009, 2010 Aleksey Shaferov and Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | import logging
21 | import logging.handlers
22 | import os
23 |
24 | logging.basicConfig(format="%(message)s", level=logging.DEBUG)
25 | logger = logging.getLogger("DockbarX")
26 |
27 | import common
28 |
29 | def log_to_file():
30 | log_dir = os.path.join(common.get_app_homedir(), "log")
31 | if not os.path.exists(log_dir):
32 | os.makedirs(log_dir)
33 | log_file = os.path.join(log_dir, "dockbarx.log")
34 | file_handler = logging.handlers.RotatingFileHandler(log_file, "a", 0, 5)
35 | file_handler.setLevel(logging.DEBUG)
36 | formatter = logging.Formatter("%(levelname)s\t| " + \
37 | "%(asctime)s\t| %(message)s")
38 | file_handler.setFormatter(formatter)
39 | logger.addHandler(file_handler)
40 | file_handler.doRollover()
41 |
42 |
43 | class StdOutWrapper():
44 | """
45 | Call wrapper for stdout
46 | """
47 |
48 | def __init__(self):
49 | self.message_text = ""
50 | self.log_this = logger.debug
51 |
52 | def write(self, s):
53 | if s.startswith("\n") or s.startswith("\r"):
54 | if self.message_text:
55 | self.log_this(self.message_text)
56 | self.message_text = ""
57 | s = s.lstrip("\r\n")
58 | if s.endswith("\n") or s.endswith("\r") :
59 | s = s.rstrip("\r\n")
60 | self.message_text += s
61 | if self.message_text:
62 | self.log_this(self.message_text)
63 | self.message_text = ""
64 | else:
65 | self.message_text += s
66 |
67 | class StdErrWrapper(StdOutWrapper):
68 | """
69 | Call wrapper for stderr
70 | """
71 |
72 | def __init__(self):
73 | StdOutWrapper.__init__(self)
74 | self.log_this = logger.error
75 |
76 |
--------------------------------------------------------------------------------
/dockbarx/mediabuttons.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # dockbar.py
4 | #
5 | # Copyright 2008, 2009, 2010 Aleksey Shaferov and Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | import gtk
21 | import dbus
22 | from dbus.mainloop.glib import DBusGMainLoop
23 |
24 | from cairowidgets import *
25 | from log import logger
26 | import weakref
27 |
28 | DBusGMainLoop(set_as_default=True)
29 | BUS = dbus.SessionBus()
30 |
31 | class MediaButtons(gtk.Alignment):
32 | def __init__(self, name):
33 | self.sids = []
34 | self.player = BUS.get_object("org.mpris.MediaPlayer2.%s" % name,
35 | "/org/mpris/MediaPlayer2")
36 | self.player_iface = dbus.Interface(self.player,
37 | dbus_interface=\
38 | "org.mpris.MediaPlayer2.Player")
39 | self.signal = self.player.connect_to_signal("PropertiesChanged",
40 | self.__on_properties_changed,
41 | dbus_interface=\
42 | "org.freedesktop.DBus.Properties")
43 | gtk.Alignment.__init__(self, 0.5, 0.5, 0, 0)
44 | hbox = gtk.HBox()
45 | self.previous_button = CairoNextButton(previous=True)
46 | self.playpause_button = CairoPlayPauseButton()
47 | self.next_button = CairoNextButton()
48 | connect(self.previous_button, "clicked", self.previous)
49 | connect(self.playpause_button,"clicked", self.playpause)
50 | connect(self.next_button, "clicked", self.next)
51 | hbox.pack_start(self.previous_button)
52 | hbox.pack_start(self.playpause_button, padding=4)
53 | hbox.pack_start(self.next_button)
54 | self.add(hbox)
55 | hbox.show_all()
56 | self.update_plaback_status()
57 |
58 | def get_property(self, property):
59 | # This function gets the property using a sync call
60 | # (in other words: avoid using it).
61 | try:
62 | ret_str = str(self.player.Get("org.mpris.MediaPlayer2.Player",
63 | property,
64 | dbus_interface=\
65 | "org.freedesktop.DBus.Properties"))
66 | except:
67 | return
68 | return ret_str
69 |
70 | def previous(self, *args):
71 | self.player_iface.Previous(reply_handler=self.__reply_handler,
72 | error_handler=self.__error_handler)
73 |
74 | def playpause(self, *args):
75 | self.player_iface.PlayPause(reply_handler=self.__reply_handler,
76 | error_handler=self.__playpause_error_handler)
77 |
78 | def __playpause_error_handler(self, err):
79 | # Todo: There must be a less ugly way to catch this error.
80 | if str(err).startswith("org.freedesktop.DBus.Error.UnknownMethod"):
81 | # Todo: Would it be worth it to make this function async?
82 | if "Playing" in self.get_property("PlaybackStatus"):
83 | self.player_iface.Pause(reply_handler=self.__reply_handler,
84 | error_handler=self.__error_handler)
85 | else:
86 | self.player_iface.Play(reply_handler=self.__reply_handler,
87 | error_handler=self.__error_handler)
88 |
89 | def next(self, *args):
90 | self.player_iface.Next(reply_handler=self.__reply_handler,
91 | error_handler=self.__error_handler)
92 |
93 | def show_player(self, *args):
94 | try:
95 | self.player.Raise(dbus_interface="org.mpris.MediaPlayer2")
96 | except:
97 | return False
98 | return True
99 |
100 | def remove(self):
101 | self.signal.remove()
102 | disconnect(self.previous_button)
103 | disconnect(self.next_button)
104 | disconnect(self.playpause_button)
105 | self.previous_button.destroy()
106 | self.next_button.destroy()
107 | self.playpause_button.destroy()
108 | del self.player_iface
109 | del self.player
110 |
111 | def __reply_handler(self, *args):
112 | pass
113 |
114 | def __error_handler(self, err):
115 | print "DBus error in media buttons:", err
116 |
117 | def __on_properties_changed(self, iface, changed_props, inv_props):
118 | if "PlaybackStatus" in changed_props:
119 | pause = changed_props["PlaybackStatus"]== "Playing"
120 | self.playpause_button.set_pause(pause)
121 |
122 | def update_plaback_status(self):
123 | self.player.Get("org.mpris.MediaPlayer2.Player",
124 | "PlaybackStatus",
125 | dbus_interface="org.freedesktop.DBus.Properties",
126 | reply_handler=self.__playback_status_reply_handler,
127 | error_handler=self.__error_handler)
128 |
129 | def __playback_status_reply_handler(self, status):
130 | self.playpause_button.set_pause(status == "Playing")
131 |
132 | class Mpris2Watch():
133 | def __init__(self, dockbar):
134 | self.dockbar_r = weakref.ref(dockbar)
135 | self.players = []
136 | self.fdo = BUS.get_object("org.freedesktop.DBus",
137 | "/org/freedesktop/DBus")
138 | addresses = self.fdo.ListNames(dbus_interface="org.freedesktop.DBus")
139 | for address in addresses:
140 | if str(address).startswith("org.mpris.MediaPlayer2."):
141 | try:
142 | BUS.get_object(address, "/org/mpris/MediaPlayer2")
143 | except:
144 | logger.warning("Error: Couldn't make dbus connection " + \
145 | "with %s" % address)
146 | continue
147 | self.players.append(
148 | str(address).replace("org.mpris.MediaPlayer2.", ""))
149 |
150 | self.fdo.connect_to_signal("NameOwnerChanged",
151 | self.__on_name_change_detected,
152 | dbus_interface=\
153 | "org.freedesktop.DBus")
154 |
155 | def __on_name_change_detected(self, name, previous_owner, current_owner):
156 | if str(name).startswith("org.mpris.MediaPlayer2."):
157 | player_name = str(name).replace("org.mpris.MediaPlayer2.", "")
158 | if previous_owner == "" and current_owner !="":
159 | try:
160 | BUS.get_object(name, "/org/mpris/MediaPlayer2")
161 | except:
162 | logger.exception("Error: Couldn't make dbus " + \
163 | "connection with %s" % name)
164 | return
165 | self.players.append(player_name)
166 | self.dockbar_r().media_player_added(player_name)
167 | if previous_owner != "" and current_owner == "":
168 | try:
169 | self.players.remove(player_name)
170 | except ValueError:
171 | pass
172 | else:
173 | self.dockbar_r().media_player_removed(player_name)
174 |
175 | def has_player(self, name):
176 | return name in self.players
177 |
178 | def get_players(self):
179 | return self.players
180 |
181 |
--------------------------------------------------------------------------------
/dockbarx/unity.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # unity.py
4 | #
5 | # Copyright 2011 Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 |
21 | import dbus
22 | import dbus.service
23 | import gobject
24 | import weakref
25 | from dbus.mainloop.glib import DBusGMainLoop
26 | from log import logger
27 | import time
28 |
29 | DBusGMainLoop(set_as_default=True)
30 | BUS = dbus.SessionBus()
31 |
32 | class UnityFakeDBus(dbus.service.Object):
33 | def __new__(cls):
34 | if "com.canonical.Unity" in dbus.SessionBus().list_names():
35 | return None
36 | else:
37 | return dbus.service.Object.__new__(cls)
38 |
39 | def __init__(self):
40 | bus_name = dbus.service.BusName("com.canonical.Unity",
41 | bus = dbus.SessionBus())
42 | dbus.service.Object.__init__(self, bus_name,
43 | "/org/dockbar/fakeunity")
44 |
45 | def stop(self):
46 | self.remove_from_connection()
47 |
48 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
49 | in_signature='ss', out_signature='v')
50 | def Get(self, interface_name, property_name):
51 | return self.GetAll(interface_name)[property_name]
52 |
53 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
54 | in_signature='s', out_signature='a{sv}')
55 | def GetAll(self, interface_name):
56 | if interface_name == "com.canonical.Unity":
57 | return {}
58 | else:
59 | raise dbus.exceptions.DBusException(
60 | 'com.example.UnknownInterface',
61 | 'The Foo object does not implement the %s interface'
62 | % interface_name)
63 |
64 | @dbus.service.method(dbus_interface=dbus.PROPERTIES_IFACE,
65 | in_signature='ssv', out_signature='')
66 | def Set(self, interface_name, property_name, property_value):
67 | pass
68 |
69 | @dbus.service.signal(dbus_interface=dbus.PROPERTIES_IFACE,
70 | signature='sa{sv}as')
71 | def PropertiesChanged(self, interface_name, changed_properties,
72 | invalidated_properties):
73 | pass
74 |
75 |
76 | class UnityWatcher():
77 | def __init__(self, dockbar):
78 | self.dockbar_r = weakref.ref(dockbar)
79 | self.fake_unity = None
80 | self.sid = None
81 | self.name_owner_sid = None
82 | self.props_by_app = {}
83 |
84 | def start(self):
85 | if self.fake_unity is None:
86 | self.fake_unity = UnityFakeDBus()
87 | if self.sid is None:
88 | interface = "com.canonical.Unity.LauncherEntry"
89 | self.sid = BUS.add_signal_receiver(self.__on_signal_recieved,
90 | dbus_interface=interface,
91 | sender_keyword="sender")
92 | if self.name_owner_sid is None:
93 | self.name_owner_sid = BUS.add_signal_receiver(
94 | self.__on_name_owner_changed,
95 | signal_name="NameOwnerChanged",
96 | bus_name="org.freedesktop.DBus",
97 | path="/org/freedesktop/DBus",
98 | dbus_interface="org.freedesktop.DBus")
99 |
100 | def stop(self):
101 | for group in self.dockbar_r().groups:
102 | if group.unity_launcher_bus_name is not None:
103 | # Remove counts, quicklists etc.
104 | group.set_unity_properties({}, None)
105 | self.props_by_app = {}
106 | if self.sid is not None:
107 | BUS.remove_signal_receiver(self.sid)
108 | self.sid = None
109 | if self.name_owner_sid is not None:
110 | BUS.remove_signal_receiver(self.name_owner_sid)
111 | self.name_owner_sid = None
112 | if self.fake_unity is not None:
113 | self.fake_unity.stop()
114 | self.fake_unity = None
115 |
116 | def apply_for_group(self, group):
117 | app_uri = group.get_app_uri()
118 | if app_uri in self.props_by_app:
119 | group.set_unity_properties(self.props_by_app[app_uri],
120 | self.props_by_app[app_uri]["sender"])
121 |
122 | def __on_signal_recieved(self, app_uri, properties, sender):
123 | if not app_uri or not sender:
124 | return
125 | properties["count"] = self.__fix_long(properties.get("count", 0))
126 | dockbar = self.dockbar_r()
127 | if app_uri in self.props_by_app and \
128 | sender == self.props_by_app[app_uri]["sender"]:
129 | for key, value in properties.items():
130 | self.props_by_app[app_uri][key] = value
131 | else:
132 | self.props_by_app[app_uri] = properties
133 | properties["sender"] = sender
134 | for group in dockbar.groups:
135 | if group.get_app_uri() == app_uri:
136 | break
137 | else:
138 | return
139 | group.set_unity_properties(self.props_by_app[app_uri], sender)
140 |
141 | def __fix_long(self, count):
142 | # Apparently python dbus doensn't handle all kinds of int/long
143 | # variables correctly. Try the UnityFox firefox addon for example.
144 | # This is a hack to fix that. There's perhaps a more correct way
145 | # to do this?
146 | if count < -(1<<35):
147 | # We assume that the actual int value contains 36(?) bits but
148 | # python-dbus has made a number of 64 bits instead. The first bits
149 | # then contains garbage.
150 | count = int(bin(count)[-36:], 2)
151 | # The nuber will now start from 1<<35 and go downwards as the
152 | # actual number increases (because count was negative before we
153 | # cut the first half). Let's fix that.
154 | count = (1<<35) - count
155 | return count
156 |
157 | def __on_name_owner_changed(self, name, before, after):
158 | dockbar = self.dockbar_r()
159 | if not after:
160 | # Name disappeared. Check if it's one of the unity launchers.
161 | for group in dockbar.groups:
162 | if name == group.unity_launcher_bus_name:
163 | # Remove counts, quicklists etc.
164 | group.set_unity_properties({}, None)
165 | for key, value in self.props_by_app.items():
166 | if name == value["sender"]:
167 | del self.props_by_app[key]
168 |
169 |
170 | class DBusMenu(object):
171 | def __new__(cls, group, bus_name, path):
172 | if not bus_name in BUS.list_names():
173 | return None
174 | return object.__new__(cls)
175 |
176 | def __init__(self, group, bus_name, path):
177 | self.group_r = weakref.ref(group)
178 | self.sids = []
179 | self.__needed_menu_updates = []
180 | self.bus_name = bus_name
181 | self.path = path
182 | self.obj = BUS.get_object(bus_name, path)
183 | self.iface = dbus.Interface(self.obj, dbus_interface=\
184 | "com.canonical.dbusmenu")
185 | self.layout = [0,{},[]]
186 | empty_list = dbus.Array([], "s")
187 | self.iface.GetLayout(0, -1, empty_list,
188 | reply_handler=self.__layout_loaded,
189 | error_handler=self.__error_loading)
190 |
191 | def __layout_loaded(self, revision, layout):
192 | group = self.group_r()
193 | if group is None:
194 | return
195 | self.layout = layout
196 | self.revision = revision
197 | self.sids.append(self.iface.connect_to_signal("ItemsPropertiesUpdated",
198 | self.__on_properties_updated))
199 | self.sids.append(self.iface.connect_to_signal("LayoutUpdated",
200 | self.__on_layout_updated))
201 | self.sids.append(self.iface.connect_to_signal("ItemActivationRequested",
202 | self.__on_item_activition_requested))
203 | if group.menu:
204 | group.menu.update_quicklist_menu(layout)
205 |
206 | def __error_loading(self, *args):
207 | # The interface is probably not up and running yet
208 | time.sleep(0.2)
209 | empty_list = dbus.Array([], "s")
210 | self.iface.GetLayout(0, -1, empty_list,
211 | reply_handler=self.__layout_loaded,
212 | error_handler=self.__error_handler)
213 |
214 | def __error_handler(self, *args):
215 | pass
216 |
217 | def __reply_handler(self, *args):
218 | pass
219 |
220 | def fetch_layout(self):
221 | empty_list = dbus.Array([], "s")
222 | self.iface.GetLayout(0, -1, empty_list,
223 | reply_handler=self.__fetch_layout_reply_handler,
224 | error_handler=self.__fetch_layout_error_handler)
225 |
226 | def __fetch_layout_reply_handler(self, revision, layout):
227 | self.revision = revision
228 | self.layout = layout
229 | self.__update_group_menus()
230 |
231 | def __fetch_layout_error_handler(self, *args):
232 | logger.warning("Couldn't fetch layout %s" % args)
233 |
234 | def __update_group_menus(self):
235 | group = self.group_r()
236 | if group is None or not group.menu:
237 | self.__needed_menu_updates = []
238 | return
239 | while self.__needed_menu_updates:
240 | parent = self.__needed_menu_updates.pop()
241 | layout = self.__recursive_match(self.layout, parent)
242 | group.menu.update_quicklist_menu(layout)
243 |
244 | def __recursive_match(self, a, k):
245 | if a[0] == k:
246 | return a
247 | for child in a[2]:
248 | result = self.__recursive_match(child, k)
249 | if result is not None:
250 | return result
251 | return None
252 |
253 | def __on_layout_updated(self, revision, parent):
254 | group = self.group_r()
255 | if revision != self.revision:
256 | if not parent in self.__needed_menu_updates:
257 | # Append parent number to the __needed_menu_updates so that
258 | # the menu can be updated when the layout has been reloaded.
259 | self.__needed_menu_updates.append(parent)
260 | self.fetch_layout()
261 |
262 | def send_event(self, id, event, data, event_time):
263 | self.iface.Event(id, event, data, event_time,
264 | reply_handler=self.__reply_handler,
265 | error_handler=self.__error_handler)
266 |
267 | def __on_properties_updated(self, changed_props, removed_props):
268 | group = self.group_r()
269 | changed_items = []
270 | for props in changed_props:
271 | item = self.__recursive_match(self.layout, props[0])
272 | if item is None:
273 | continue
274 | for key, value in props[1].items():
275 | item[1][key] = value
276 | changed_items.append(item)
277 | if group.menu is not None:
278 | identifier = "unity_%s" % props[0]
279 | group.menu.set_properties(identifier, props[1])
280 | for props in removed_props:
281 | item = self.__recursive_match(self.layout, props[0])
282 | if item is None:
283 | continue
284 | for prop in props[1]:
285 | if prop in item[1]:
286 | del item[1][prop]
287 | changed_items.append(item)
288 | if group.menu is not None:
289 | for item in changed_items:
290 | identifier = "unity_%s" % item[0]
291 | group.menu.set_properties(identifier, item[1])
292 |
293 | def __on_item_activition_requested(self, item_id, timestamp):
294 | #~ group = self.group_r()
295 | #~ group.menu_item_activision_requested(item_id, time_stamp)
296 | pass
297 |
298 | def destroy(self):
299 | for sid in self.sids[:]:
300 | sid.remove()
301 | self.sids.remove(sid)
302 |
303 |
--------------------------------------------------------------------------------
/dockbarx/zg.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python2
2 |
3 | # zg.py
4 | # Copyright 2010 Siegfried-Angel Gevatter Pujals and Matias Sars
5 | #
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | # This code is based on a python snipet.
21 | # SNIPPET_NAME: Recently used items
22 | # SNIPPET_CATEGORIES: Zeitgeist
23 | # SNIPPET_DESCRIPTION: Find recently used items from Zeitgeist (synchronously)
24 | # SNIPPET_AUTHOR: Siegfried-Angel Gevatter Pujals
25 | # SNIPPET_LICENSE: GPL
26 |
27 | from datetime import date
28 | try:
29 | from zeitgeist import client, datamodel
30 | except:
31 | iface = None
32 | else:
33 | try:
34 | iface = client.ZeitgeistDBusInterface()
35 | zgclient = client.ZeitgeistClient()
36 | except RuntimeError:
37 | print "Error: Could not connect to Zeitgeist."
38 | iface = None
39 |
40 | def pythonify_zg_events(events):
41 | return_list = []
42 | for event in events:
43 | for subject in event.subjects:
44 | return_list.append((str(subject.text), str(subject.uri)))
45 | return return_list
46 |
47 | def err_handler(*args):
48 | print "Zeitgeist error:", args
49 |
50 | def _get(name=None,
51 | result_type=None,
52 | days=14,
53 | number_of_results=5,
54 | mimetypes=[],
55 | handler=None):
56 | if iface is None:
57 | return
58 | if result_type is None:
59 | result_type = datamodel.ResultType.MostRecentSubjects
60 | time_range = datamodel.TimeRange.from_seconds_ago(days * 3600 * 24)
61 |
62 | if not mimetypes:
63 | event_template = datamodel.Event()
64 | if name:
65 | event_template.set_actor("application://%s"%name)
66 | event_templates = [event_template]
67 | else:
68 | event_templates = []
69 | for mimetype in mimetypes:
70 | event_template = datamodel.Event()
71 | if name:
72 | event_template.set_actor("application://%s"%name)
73 | event_template.append_subject(
74 | datamodel.Subject.new_for_values(mimetype=mimetype))
75 | event_templates.append(event_template)
76 |
77 | #~ results = iface.FindEvents(time_range,
78 | #~ event_templates,
79 | #~ datamodel.StorageState.Any,
80 | #~ number_of_results,
81 | #~ result_type)
82 | #print "results", results
83 | zgclient.find_events_for_templates(event_templates,
84 | handler,
85 | timerange=time_range,
86 | storage_state=datamodel.StorageState.Any,
87 | num_events=number_of_results,
88 | result_type=result_type,
89 | error_handler=err_handler)
90 |
91 | #~ # Pythonize the result
92 | #~ return_list = []
93 | #~ for result in results:
94 | #~ for subject in datamodel.Event(result).get_subjects():
95 | #~ return_list.append((str(subject.text), str(subject.uri)))
96 | #~ return return_list
97 |
98 |
99 | def get_recent_for_app(name, days=14, number_of_results=5, handler=None):
100 | if iface is None:
101 | return []
102 | return _get(name, datamodel.ResultType.MostRecentSubjects,
103 | days, number_of_results, handler=handler)
104 |
105 | def get_most_used_for_app(name, days=14, number_of_results=5, handler=None):
106 | if iface is None:
107 | return []
108 | return _get(name, datamodel.ResultType.MostPopularSubjects,
109 | days, number_of_results, handler=handler)
110 |
111 | def get_most_used_for_mimetypes(mimetypes, days=1, \
112 | number_of_results=5, handler=None):
113 | if iface is None:
114 | return []
115 | return _get(mimetypes=mimetypes,
116 | result_type=datamodel.ResultType.MostPopularSubjects,
117 | days=days,
118 | number_of_results=number_of_results,
119 | handler=handler)
120 |
121 | def get_recent_for_mimetypes(mimetypes, days=1, number_of_results=5, \
122 | handler=None):
123 | if iface is None:
124 | return []
125 | return _get(mimetypes=mimetypes,
126 | result_type=datamodel.ResultType.MostRecentSubjects,
127 | days=days,
128 | number_of_results=number_of_results,
129 | handler=handler)
130 |
131 |
132 |
--------------------------------------------------------------------------------
/dockbarx_factory:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # dockbarx_factory
4 | #
5 | # Copyright 2008, 2009, 2010 Aleksey Shaferov and Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | from dockbarx.log import *
21 | import sys
22 | if not (len(sys.argv) == 2 and sys.argv[1] == "run-in-window"):
23 | log_to_file()
24 | sys.stderr = StdErrWrapper()
25 | sys.stdout = StdOutWrapper()
26 |
27 | import pygtk
28 | pygtk.require("2.0")
29 | import gtk
30 | import gnomeapplet
31 | import dockbarx.dockbar
32 | import gobject
33 |
34 | class DockBarWindow():
35 | """DockBarWindow sets up the window if run-in-window is used."""
36 | def __init__(self):
37 | self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
38 | self.window.set_default_size(200,40)
39 | self.window.show()
40 | self.window.set_property("skip-taskbar-hint",True)
41 | self.window.set_keep_above(True)
42 | self.window.connect ("destroy",self.__destroy)
43 |
44 | applet = gnomeapplet.Applet()
45 | applet.reparent(self.window)
46 | self.dockbar = dockbarx.dockbar.DockBar(self)
47 |
48 | def __on_pref_clicked(self, *args):
49 | self.dockbar.open_preference()
50 |
51 | def __destroy (self,widget,data=None):
52 | gtk.main_quit()
53 |
54 | def main(self):
55 | gtk.main()
56 |
57 | class DockbarGnomeapplet():
58 | def __init__(self, applet):
59 | self.applet = applet
60 | self.dockbar = dockbarx.dockbar.DockBar(applet)
61 | applet.set_applet_flags(gnomeapplet.HAS_HANDLE | \
62 | gnomeapplet.EXPAND_MINOR | \
63 | gnomeapplet.EXPAND_MAJOR)
64 | orients = {gnomeapplet.ORIENT_DOWN: "down",
65 | gnomeapplet.ORIENT_UP: "up",
66 | gnomeapplet.ORIENT_LEFT: "left",
67 | gnomeapplet.ORIENT_RIGHT: "right"}
68 | self.dockbar.set_orient(orients[applet.get_orient()])
69 | self.pp_menu_xml = """
70 |
71 |
72 |
73 |
74 |
75 | """
76 |
77 | self.pp_menu_verbs = [("About", self.dockbar.on_ppm_about),
78 | ("Pref", self.dockbar.on_ppm_pref),
79 | ("Reload", self.dockbar.reload)]
80 | applet.setup_menu(self.pp_menu_xml, self.pp_menu_verbs,None)
81 |
82 | # Set the applet coordinates to be way ofscreen until they've
83 | # been set correctly by a size allocate call.
84 | self.applet_origin_x = -1000
85 | self.applet_origin_y = -1000
86 | #~ applet.connect("delete-event", self.__cleanup)
87 | # Background bug workaround
88 | applet.set_background_widget(applet)
89 | applet.show_all()
90 |
91 | # Most of initializion must happen after dockbarx is
92 | # realized since python gnomeapplets crash if it
93 | # takes too long to realize.
94 | gobject.idle_add(self.__load_on_realized)
95 |
96 | def __load_on_realized(self):
97 | # Wait while gtk events are pending.
98 | while gtk.events_pending():
99 | gtk.main_iteration(False)
100 | # Load DockbarX.
101 | self.dockbar.load()
102 | # Add it to the applet.
103 | self.applet.add(self.dockbar.get_container())
104 | # Connect events.
105 | self.applet.connect("size-allocate", self.__on_applet_size_alloc)
106 | self.applet.connect("change_background", self.__on_change_background)
107 | self.applet.connect("change-orient", self.__on_change_orient)
108 |
109 | def __on_applet_size_alloc(self, widget, allocation):
110 | if not widget.window:
111 | return
112 | x,y = widget.window.get_origin()
113 | if x == self.applet_origin_x or y == self.applet_origin_y:
114 | # Nothing moved.
115 | return
116 | # Applet and/or panel moved,
117 | # icon_geo needs to be updated.
118 | self.applet_origin_x = x
119 | self.applet_origin_y = y
120 | self.dockbar.dockbar_moved()
121 |
122 | def __on_change_orient(self, arg1, data):
123 | orients = {gnomeapplet.ORIENT_DOWN: "down",
124 | gnomeapplet.ORIENT_UP: "up",
125 | gnomeapplet.ORIENT_LEFT: "left",
126 | gnomeapplet.ORIENT_RIGHT: "right"}
127 | self.applet.remove(self.dockbar.get_container())
128 | self.dockbar.set_orient(orients[self.applet.get_orient()])
129 | self.applet.add(self.dockbar.get_container())
130 |
131 | def __on_change_background(self, applet, type, color, pixmap):
132 | applet.set_style(None)
133 | rc_style = gtk.RcStyle()
134 | applet.modify_style(rc_style)
135 | if type == gnomeapplet.COLOR_BACKGROUND:
136 | applet.modify_bg(gtk.STATE_NORMAL, color)
137 | elif type == gnomeapplet.PIXMAP_BACKGROUND:
138 | style = applet.style
139 | style.bg_pixmap[gtk.STATE_NORMAL] = pixmap
140 | applet.set_style(style)
141 | return
142 |
143 | def __cleanup(self,event):
144 | pass
145 |
146 |
147 |
148 | def dockbar_factory(applet, iid):
149 | DockbarGnomeapplet(applet)
150 | return True
151 |
152 | if len(sys.argv) == 2 and sys.argv[1] == "run-in-window":
153 | dockbarwin = DockBarWindow()
154 | dockbarwin.main()
155 | else:
156 | gnomeapplet.bonobo_factory("OAFIID:GNOME_DockBarXApplet_Factory",
157 | gnomeapplet.Applet.__gtype__,
158 | "dockbar applet", "0", dockbar_factory)
159 |
--------------------------------------------------------------------------------
/dockx_applets/Creating applets:
--------------------------------------------------------------------------------
1 | An applet for Dockbarx stand alone dock needs to be a python file named dbx_applet_%name%.py, where %name% can be whatever you want. It doesn't have to be the same as the name of the applet you specify within the file.
2 |
3 | See dbx_applet_hello_world.py for a simple example or dbx_applet_clock.py for a more complex one.
4 |
--------------------------------------------------------------------------------
/dockx_applets/appindicator.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=AppIndicator
3 | exec=appindicator.py
4 |
5 | @description
6 | Application Indicators applet
7 |
--------------------------------------------------------------------------------
/dockx_applets/appindicator.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # dockbar.py
4 | #
5 | # Copyright 2008, 2009, 2010 Aleksey Shaferov and Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | import gtk
21 | import dbus
22 | import os
23 | import os.path
24 | import gobject
25 | import weakref
26 | from dbus.mainloop.glib import DBusGMainLoop
27 | from dockbarx.applets import DockXApplet
28 | from dockbarx.unity import DBusMenu
29 | from dockbarx.groupbutton import GroupMenu as Menu
30 |
31 | DBusGMainLoop(set_as_default=True)
32 | BUS = dbus.SessionBus()
33 |
34 | ICONSIZE = 18
35 |
36 | # List of possible commands to launch indicator-application-service
37 | service_cmds = ["/usr/lib/x86_64-linux-gnu/indicator-application/indicator-application-service",
38 | "/usr/lib/x86_64-linux-gnu/indicator-application-service",
39 | "/usr/lib/i386-linux-gnu/indicator-application/indicator-application-service",
40 | "/usr/lib/i386-linux-gnu/indicator-application-service",
41 | "/usr/lib/indicator-application/indicator-application-service"]
42 |
43 | class AppIndicator(gtk.EventBox):
44 | def __init__(self, applet, icon_name, position, address, obj,
45 | icon_path, label, labelguide,
46 | accessibledesc, hint=None, title=None):
47 | self.applet_r = weakref.ref(applet)
48 | self.menu = None
49 | gtk.EventBox.__init__(self)
50 | self.set_visible_window(False)
51 | self.box = None
52 | self.icon = gtk.Image()
53 | self.icon_name = None
54 | self.icon_pixbufs = {}
55 | self.label = gtk.Label()
56 | self.repack()
57 | self.icon_themepath = icon_path
58 | self.on_icon_changed(icon_name, None)
59 | self.on_label_changed(label, labelguide)
60 |
61 | # Older versions of application-indicator-service doesn't give a title.
62 | self.title = title
63 |
64 | self.dbusmenu = DBusMenu(self, address, obj)
65 |
66 | self.show_all()
67 | self.connect("button-press-event", self.on_button_press_event)
68 |
69 | def repack(self):
70 | if self.box is not None:
71 | self.box.remove(self.icon)
72 | self.box.remove(self.label)
73 | self.remove(self.box)
74 | self.box.destroy()
75 | if self.applet_r().get_position() in ("left", "right"):
76 | self.box = gtk.VBox()
77 | self.label.set_angle(270)
78 | else:
79 | self.box = gtk.HBox()
80 | self.label.set_angle(0)
81 | self.box.pack_start(self.icon)
82 | self.box.pack_start(self.label)
83 | self.add(self.box)
84 |
85 | def on_button_press_event(self, widget, event):
86 | self.show_menu(event)
87 |
88 | def show_menu(self, event):
89 | self.menu = Menu(gtk_menu=True)
90 | # Since some application menus doesn't seem to be
91 | # update, let's try to fetch just in case.
92 | self.dbusmenu.fetch_layout()
93 |
94 | self.menu.add_quicklist(self.dbusmenu.layout)
95 | self.sids = {}
96 | self.sids[0] = self.menu.connect("item-activated",
97 | self.on_menuitem_activated)
98 | #~ self.sids[1] = self.menu.connect("item-hovered",
99 | #~ self.__on_menuitem_hovered)
100 | #~ self.sids[2] = self.menu.connect("menu-resized",
101 | #~ self.__on_menu_resized)
102 | gtkmenu = self.menu.get_menu()
103 | self.sd_sid = gtkmenu.connect("selection-done", self.menu_closed)
104 | gtkmenu.popup(None, None, self.position_menu,
105 | event.button, event.time)
106 |
107 | def menu_closed(self, *args):
108 | if self.menu is not None:
109 | for key in self.sids.keys():
110 | sid = self.sids.pop(key)
111 | self.menu.disconnect(sid)
112 | self.sd_sid = self.menu.get_menu().disconnect(self.sd_sid)
113 | self.menu.delete_menu()
114 | self.menu = None
115 |
116 | def on_menuitem_activated(self, menu_item, identifier):
117 | if identifier.startswith("unity_"):
118 | identifier = int(identifier.rsplit("_", 1)[-1])
119 | data = dbus.String("", variant_level=1)
120 | t = dbus.UInt32(0)
121 | self.dbusmenu.send_event(identifier, "clicked", data, t)
122 |
123 | def on_icon_changed(self, icon_name=None, icon_desc=None):
124 | if self.icon_name == icon_name:
125 | return
126 | if icon_name is not None:
127 | self.icon_name = icon_name
128 | self.update_icon()
129 |
130 | def update_icon(self):
131 | if self.icon_name in self.icon_pixbufs:
132 | pixbuf = self.icon_pixbufs[self.icon_name]
133 | else:
134 | pixbuf = self.get_icon(self.icon_name)
135 | self.icon_pixbufs[self.icon_name] = pixbuf
136 | self.icon.set_from_pixbuf(pixbuf)
137 |
138 | def get_icon(self, icon_name):
139 | if icon_name.startswith("/") and os.path.exists(icon_name):
140 | pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(icon_name,
141 | ICONSIZE,
142 | ICONSIZE)
143 | else:
144 | icon_theme = gtk.icon_theme_get_default()
145 | if self.icon_themepath != "" and \
146 | os.path.exists(self.icon_themepath):
147 | icon_theme.prepend_search_path(self.icon_themepath)
148 | pixbuf = icon_theme.load_icon(self.icon_name, ICONSIZE, 0)
149 | return pixbuf
150 |
151 | def on_icon_themepath_changed(self, path):
152 | if self.icon_themepath == path:
153 | return
154 | self.icon_themepath = path
155 | #reset icon_pixbufs so that the icons will be reloaded.
156 | self.icon_pixbufs = {}
157 | # Update the icon
158 | if self.icon_name is not None:
159 | self.update_icon()
160 |
161 | def on_label_changed(self, label, guide):
162 | self.label.set_text(label)
163 |
164 | def on_title_changed(self, title):
165 | self.title = title
166 |
167 | def position_menu(self, menu):
168 | x, y = self.get_window().get_origin()
169 | a = self.get_allocation()
170 | w, h = menu.size_request()
171 | size = self.applet_r().get_size()
172 | if self.applet_r().get_position() == "left":
173 | x += size
174 | y += a.y
175 | if self.applet_r().get_position() == "right":
176 | x -= w
177 | y += a.y
178 | if self.applet_r().get_position() == "top":
179 | x += a.x
180 | y += size
181 | if self.applet_r().get_position() == "bottom":
182 | x += a.x
183 | y -= h
184 | screen = self.get_window().get_screen()
185 | if y + h > screen.get_height():
186 | y = screen.get_height() - h
187 | if x + w >= screen.get_width():
188 | x = screen.get_width() - w
189 | return (x, y, False)
190 |
191 | class AppIndicatorApplet(DockXApplet):
192 | def __init__(self, dbx_dict):
193 | DockXApplet.__init__(self, dbx_dict)
194 | self.alignment = gtk.Alignment(0.5, 0.5)
195 | self.add(self.alignment)
196 | self.alignment.show()
197 |
198 | self.box = None
199 | self.repack()
200 | self.show()
201 | self.fdo = BUS.get_object("org.freedesktop.DBus",
202 | "/org/freedesktop/DBus")
203 | addresses = self.fdo.ListNames(dbus_interface="org.freedesktop.DBus")
204 | for address in addresses:
205 | if str(address) == "com.canonical.indicator.application":
206 | self.connect_dbus(address)
207 | break
208 | else:
209 | gobject.idle_add(self.start_service)
210 | self.fdo.connect_to_signal("NameOwnerChanged",
211 | self.on_name_change_detected,
212 | dbus_interface=\
213 | "org.freedesktop.DBus")
214 | self.menu = None
215 |
216 | def repack(self):
217 | children = []
218 | if self.box is not None:
219 | children = self.box.get_children()
220 | for child in children:
221 | self.box.remove(child)
222 | self.alignment.remove(self.box)
223 | self.box.destroy()
224 | if self.get_position() in ("left", "right"):
225 | self.box = gtk.VBox(False, 4)
226 | else:
227 | self.box = gtk.HBox(False, 4)
228 | self.container = gtk.HBox()
229 | self.box.set_border_width(4)
230 | self.alignment.add(self.box)
231 | for child in children:
232 | self.box.pack_start(child)
233 | child.repack()
234 | self.box.show_all()
235 |
236 | def start_service(self):
237 | for cmd in service_cmds:
238 | if os.path.exists(cmd):
239 | os.system("/bin/sh -c '%s' &" % cmd)
240 | break
241 | return False
242 |
243 | def on_name_change_detected(self, name, previous_owner, current_owner):
244 | if str(name) == "com.canonical.indicator.application":
245 | if previous_owner == "" and current_owner !="":
246 | self.connect_dbus(name)
247 | if previous_owner != "" and current_owner == "":
248 | print "indicator-application-service disappeared"
249 | self.disconnect_dbus()
250 |
251 | def connect_dbus(self, address):
252 | try:
253 | self.ayatana = BUS.get_object(address,
254 | "/org/ayatana/indicator/service")
255 | except:
256 | print "Error: Couldn't make dbus connection with %s" % address
257 | return
258 | self.ayatana.Watch(dbus_interface="org.ayatana.indicator.service",
259 | reply_handler=self.reply_handler,
260 | error_handler=self.error_handler)
261 | self.obj = BUS.get_object(address,
262 | "/com/canonical/indicator/application/service")
263 | self.obj.GetApplications(
264 | dbus_interface="com.canonical.indicator.application.service",
265 | reply_handler=self.indicators_loaded,
266 | error_handler=self.error_loading)
267 |
268 | def disconnect_dbus(self):
269 | for sid in self.sids[:]:
270 | sid.remove()
271 | self.sids.remove(sid)
272 | indicators = self.box.get_children()
273 | for ind in indicators:
274 | ind.dbusmenu.destroy()
275 | if ind.menu is not None:
276 | ind.menu.delete_menu()
277 | ind.destroy()
278 |
279 | def indicators_loaded(self, indicators):
280 | for ind in indicators:
281 | self.ind_added(*ind)
282 | self.sids = []
283 |
284 | iface = dbus.Interface(self.obj,
285 | dbus_interface="com.canonical.indicator.application.service")
286 | connections = {"ApplicationAdded": self.ind_added,
287 | "ApplicationIconChanged": self.on_icon_changed,
288 | "ApplicationIconThemePathChanged":
289 | self.on_icon_themepath_changed,
290 | "ApplicationLabelChanged": self.on_label_changed,
291 | "ApplicationRemoved": self.ind_removed,
292 | "ApplicationTitleChanged": self.on_title_changed}
293 | for sig, call_func in connections.items():
294 | self.sids.append(iface.connect_to_signal(sig, call_func))
295 |
296 | def ind_added(self, *args):
297 | position = args[1]
298 | ind = AppIndicator(self, *args)
299 | self.box.pack_start(ind)
300 | self.box.reorder_child(ind, position)
301 |
302 | def ind_removed(self, position):
303 | indicators = self.box.get_children()
304 | ind = indicators[position]
305 | ind.dbusmenu.destroy()
306 | if ind.menu is not None:
307 | ind.menu.delete_menu()
308 | ind.destroy()
309 |
310 | def on_icon_changed(self, position, icon_name, icon_desc):
311 | indicators = self.box.get_children()
312 | ind = indicators[position]
313 | ind.on_icon_changed(icon_name, icon_desc)
314 |
315 | def on_icon_themepath_changed(self, position, path):
316 | indicators = self.box.get_children()
317 | ind = indicators[position]
318 | ind.on_themepath_changed(path)
319 |
320 | def on_label_changed(self, position, label, guide):
321 | indicators = self.box.get_children()
322 | ind = indicators[position]
323 | ind.on_label_changed(label, guide)
324 |
325 | def on_title_changed(self, position, title):
326 | indicators = self.box.get_children()
327 | ind = indicators[position]
328 | ind.on_title_changed(title)
329 |
330 | def error_loading(self, err):
331 | print err
332 |
333 | def reply_handler(self, *args):
334 | pass
335 |
336 | def error_handler(self, err):
337 | print err
338 |
339 | def get_dbx_applet(dbx_dict):
340 | global aiapplet
341 | try:
342 | aiapplet.repack()
343 | except:
344 | # First run, make a new instance
345 | aiapplet = AppIndicatorApplet(dbx_dict)
346 | return aiapplet
347 |
--------------------------------------------------------------------------------
/dockx_applets/battery_status.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=Battery Status
3 | exec=battery_status.py
4 |
5 | @description
6 | Battery Status applet for the GNOME desktop 1.1 by Ivan Zorin ported to DockX
7 |
--------------------------------------------------------------------------------
/dockx_applets/cardapio.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=Cardapio
3 | exec=cardapio_dbx.py
4 |
5 | @description
6 | An alternative gnome menu, launcher and much more.
7 |
--------------------------------------------------------------------------------
/dockx_applets/cardapio_dbx.py:
--------------------------------------------------------------------------------
1 | #
2 | # Copyright (C) 2010 Cardapio Team (tvst@hotmail.com)
3 | #
4 | # This program is free software: you can redistribute it and/or modify
5 | # it under the terms of the GNU General Public License as published by
6 | # the Free Software Foundation, either version 3 of the License, or
7 | # (at your option) any later version.
8 | #
9 | # This program is distributed in the hope that it will be useful,
10 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | # GNU General Public License for more details.
13 | #
14 | # You should have received a copy of the GNU General Public License
15 | # along with this program. If not, see .
16 | #
17 |
18 | import sys
19 | import gtk
20 | from dockbarx.applets import DockXApplet
21 | sys.path.insert(0, "/usr/lib/cardapio")
22 | from misc import *
23 | from CardapioAppletInterface import *
24 | from Cardapio import Cardapio
25 |
26 | class CardapioDockXApplet(CardapioAppletInterface):
27 |
28 | panel_type = PANEL_TYPE_AWN
29 |
30 | IS_CONFIGURABLE = True
31 | IS_CONTROLLABLE = True
32 |
33 | ICON = 'cardapio-dark256'
34 |
35 | def __init__(self, applet):
36 |
37 | self.applet = applet
38 |
39 | self.applet_press_handler = None
40 | self.applet_enter_handler = None
41 | self.applet_leave_handler = None
42 | self.autohide_cookie = None
43 |
44 | self.applet.set_tooltip_text('Cardapio')
45 |
46 |
47 | def setup(self, cardapio):
48 |
49 | self.cardapio = cardapio
50 |
51 | self.preferences = gtk.ImageMenuItem(gtk.STOCK_PREFERENCES)
52 | self.edit = gtk.ImageMenuItem(gtk.STOCK_EDIT)
53 | self.about = gtk.ImageMenuItem(gtk.STOCK_ABOUT)
54 |
55 | self.preferences.connect('activate', self._open_options_dialog)
56 | self.edit.connect('activate', self._launch_edit_app)
57 | self.about.connect('activate', self._open_about_dialog)
58 | self.applet.connect('unmap-event', self._on_applet_destroy)
59 |
60 | self.menu = gtk.Menu()
61 | self.menu.insert(self.preferences, 0)
62 | self.menu.insert(self.edit, 1)
63 | self.menu.insert(self.about, 2)
64 | self.menu.insert(gtk.SeparatorMenuItem(), 3)
65 | self.menu.show_all()
66 |
67 |
68 | def update_from_user_settings(self, settings):
69 |
70 | if self.applet_press_handler is not None:
71 | try:
72 | self.applet.disconnect(self.applet_press_handler)
73 | self.applet.disconnect(self.applet_enter_handler)
74 | self.applet.disconnect(self.applet_leave_handler)
75 | except: pass
76 |
77 | if settings['open on hover']:
78 | self.applet_press_handler = self.applet.connect('clicked', self._on_applet_clicked, True)
79 | self.applet_enter_handler = self.applet.connect('enter-notify-event', self._on_applet_cursor_enter)
80 | self.applet_leave_handler = self.applet.connect('leave-notify-event', self._on_applet_cursor_leave)
81 |
82 | else:
83 | self.applet_press_handler = self.applet.connect('clicked', self._on_applet_clicked, False)
84 | self.applet_enter_handler = self.applet.connect('enter-notify-event', return_true)
85 | self.applet_leave_handler = self.applet.connect('leave-notify-event', return_true)
86 |
87 | try:
88 | self.applet.set_icon_name(settings['applet icon'])
89 | return
90 | except: pass
91 |
92 | try: self.applet.set_icon_name(self.ICON)
93 | except: pass
94 |
95 |
96 | def get_size(self):
97 | icon_size = self.applet.get_size()
98 | return icon_size, icon_size
99 |
100 |
101 | def get_position(self):
102 |
103 | x, y = self.applet.get_window().get_origin()
104 | ax, ay, w, h = self.applet.get_allocation()
105 | x += ax
106 | y += ay
107 | icon_size = self.applet.get_full_size()
108 |
109 | pos_type = self.applet.get_position().lower()
110 |
111 | if pos_type == "bottom" : y = y + h - icon_size
112 | elif pos_type == "right" : x = x + w - icon_size
113 | return x, y
114 |
115 |
116 | def get_orientation(self):
117 | pos_type = self.applet.get_position().lower()
118 | if pos_type == "top" : return POS_TOP
119 | if pos_type == "bottom": return POS_BOTTOM
120 | if pos_type == "left" : return POS_LEFT
121 | else: return POS_RIGHT
122 |
123 |
124 | def has_mouse_cursor(self, mouse_x, mouse_y):
125 | return False
126 |
127 |
128 | def draw_toggled_state(self, state):
129 | pass
130 |
131 |
132 | def disable_autohide(self, state):
133 |
134 | if state:
135 | self.autohide_cookie = self.applet.inhibit_autohide('Showing Cardapio')
136 |
137 | elif self.autohide_cookie != None:
138 | self.applet.uninhibit_autohide(self.autohide_cookie)
139 | self.autohide_cookie = None
140 |
141 |
142 | def _on_applet_clicked(self, widget, event, ignore_main_button):
143 | if event.button == 1 and not ignore_main_button:
144 | self.cardapio.show_hide()
145 | elif event.button == 3:
146 | self.menu.popup(None, None, None, event.button, event.time)
147 |
148 |
149 | def _on_applet_cursor_enter(self, widget, event):
150 | self.cardapio.show_hide()
151 | return True
152 |
153 |
154 | def _on_applet_cursor_leave(self, widget, event):
155 | self.cardapio.handle_mainwindow_cursor_leave()
156 |
157 |
158 | def _open_options_dialog(self, widget):
159 | self.cardapio.open_options_dialog()
160 |
161 |
162 | def _launch_edit_app(self, widget):
163 | self.cardapio.launch_edit_app()
164 |
165 |
166 | def _open_about_dialog(self, widget):
167 | self.cardapio.handle_about_menu_item_clicked(widget)
168 |
169 |
170 | def _on_applet_destroy(self, *args):
171 | self.cardapio.save_and_quit()
172 |
173 |
174 | def get_screen_number(self):
175 | """
176 | Returns the number of the screen where the applet is placed
177 | """
178 | screen = self.applet.get_screen()
179 | if screen is None: return 0
180 | return screen.get_number()
181 |
182 | class MenuButtonApplet(DockXApplet):
183 | """An example applet for DockbarX standalone dock"""
184 |
185 | def __init__(self, dbx_dict):
186 | DockXApplet.__init__(self, dbx_dict)
187 | self.icon = gtk.Image()
188 | self.icon.set_from_icon_name("cardapio-dark256", gtk.ICON_SIZE_DIALOG)
189 | self.icon.set_pixel_size(self.get_size())
190 | self.add(self.icon)
191 | self.icon.show()
192 | self.show()
193 |
194 | def set_icon_name(self, name):
195 | if os.path.isfile(name):
196 | self.icon.set_from_file(name)
197 | else:
198 | self.icon.set_from_icon_name(name, gtk.ICON_SIZE_DIALOG)
199 | self.icon.set_pixel_size(self.get_size())
200 |
201 | def get_dbx_applet(dbx_dict):
202 | global mbapplet
203 | try:
204 | return mbapplet
205 | except:
206 | # First run, make a new instance
207 | mbapplet = MenuButtonApplet(dbx_dict)
208 | cardapio_applet = CardapioDockXApplet(mbapplet)
209 | cardapio = Cardapio(panel_applet=cardapio_applet)
210 | return mbapplet
211 |
--------------------------------------------------------------------------------
/dockx_applets/clock.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=Clock
3 | exec=clock.py
4 |
5 | @description
6 | Shows the time.
7 |
--------------------------------------------------------------------------------
/dockx_applets/clock.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # Hello world dockbarx applet
4 | #
5 | # Copyright 2011 Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see %H:%M"
29 | DEFAULT_COMMAND = "orage"
30 |
31 | class ClockApplet(DockXApplet):
32 | """A clock applet for DockbarX standalone dock"""
33 | applet_name = "Clock"
34 | applet_description = "Shows the time."
35 |
36 | def __init__(self, dbx_dict):
37 | DockXApplet.__init__(self, dbx_dict)
38 | alignment = gtk.Alignment(xalign=0.5, yalign=0.5)
39 | self.add(alignment)
40 | self.label = gtk.Label()
41 | self.label.set_use_markup(True)
42 | alignment.add(self.label)
43 | alignment.show_all()
44 | self.show()
45 | self.label_text = ""
46 | self.set_text_direction(self.get_setting("text_direction", "default"))
47 | self.font = self.get_setting("font", "Sans 14")
48 | self.color = self.get_setting("color", "#FFFFFF")
49 | self.show_date = self.get_setting("show_date", False)
50 | self.use_custom_format = self.get_setting("use_custom_format", False)
51 | self.custom_format = self.get_setting("custom_format",
52 | DEFAULT_CUSTOM_FORMAT)
53 | self.command = self.get_setting("command", DEFAULT_COMMAND)
54 | self.update()
55 | gobject.timeout_add(1000, self.update)
56 | self.connect("clicked", self.on_clicked)
57 |
58 | self.menu = gtk.Menu()
59 | preferences_item = gtk.ImageMenuItem(gtk.STOCK_PREFERENCES)
60 | preferences_item.connect('activate', self.open_preferences)
61 | self.menu.insert(preferences_item, 0)
62 | self.menu.show_all()
63 |
64 | def update(self, *args):
65 | if self.use_custom_format:
66 | # Todo: User made markup errors needs to be catched but how?
67 | text = time.strftime(self.custom_format)
68 | if text != self.label_text:
69 | self.label.set_label(text)
70 | self.label_text = text
71 | return True
72 | if self.show_date:
73 | tstr = time.strftime("%x %H:%M")
74 | else:
75 | tstr = time.strftime("%H:%M")
76 | text ="%s" % (self.color,
77 | self.font,
78 | tstr)
79 | if text != self.label_text:
80 | self.label.set_label(text)
81 | self.label_text = text
82 | return True
83 |
84 | def on_setting_changed(self, key, value):
85 | if key == "font":
86 | self.font = value
87 | if key == "color":
88 | self.color = value
89 | if key == "show_date":
90 | self.show_date = value
91 | if key == "custom_format":
92 | self.custom_format = value
93 | if key == "use_custom_format":
94 | self.use_custom_format = value
95 | if key == "text_direction":
96 | self.set_text_direction(value)
97 | if key == "command":
98 | self.command = value
99 | self.update()
100 |
101 | def set_text_direction(self, direction):
102 | if direction == "default":
103 | if self.get_position() in ("left", "right"):
104 | direction = "top-down"
105 | else:
106 | direction = "left-right"
107 | angles = {"left-right": 0, "top-down": 270, "bottom-up": 90}
108 | self.label.set_angle(angles[direction])
109 |
110 | def on_clicked(self, widget, event):
111 | if event.button == 1:
112 | os.system("/bin/sh -c '%s' &" % self.command)
113 | elif event.button == 3:
114 | self.menu.popup(None, None, None, event.button, event.time)
115 |
116 | def open_preferences(self, *args):
117 | run_applet_dialog(self.APPLET_NAME)
118 |
119 |
120 | class ClockAppletPreferences(DockXAppletDialog):
121 | Title = "Clock Applet Preferences"
122 |
123 | def __init__(self, applet_name):
124 | DockXAppletDialog.__init__(self, applet_name)
125 | table = gtk.Table(2, 3)
126 | self.vbox.pack_start(table)
127 |
128 | self.font_button = gtk.FontButton()
129 | self.font_button.set_use_font(True)
130 | self.font_button.set_use_size(True)
131 | self.font_button.set_show_style(True)
132 | label = gtk.Label(_("Font:"))
133 | table.attach(label, 0, 1, 0, 1)
134 | self.font_button.set_title(_("Clock font"))
135 | self.font_button.connect("font_set", self.__set_font)
136 | table.attach(self.font_button, 1, 2, 0, 1)
137 |
138 | label = gtk.Label(_("Color:"))
139 | table.attach(label, 0, 1, 1, 2)
140 | self.color_button = gtk.ColorButton()
141 | self.color_button.set_title(_("Font color"))
142 | self.color_button.connect("color-set", self.__color_set)
143 | table.attach(self.color_button, 1, 2, 1, 2)
144 |
145 | self.date_cb = gtk.CheckButton(_("Show Date"))
146 | self.date_cb.connect("toggled", self.__cb_toggled, "show_date")
147 | table.attach(self.date_cb, 1, 2, 2, 3)
148 |
149 | frame = gtk.Frame()
150 | self.vbox.pack_start(frame)
151 | vbox = gtk.VBox()
152 | frame.add(vbox)
153 | self.custom_clock_cb = gtk.CheckButton(_("Use custom clock"))
154 | self.custom_clock_cb.connect("toggled",
155 | self.__cb_toggled, "use_custom_format")
156 | vbox.pack_start(self.custom_clock_cb)
157 | hbox = gtk.HBox()
158 | vbox.pack_start(hbox)
159 | self.cf_entry = gtk.Entry()
160 | self.cf_entry.set_tooltip_text("The format is identical to gnome-panel clock's custom format. Google 'gnome-panel custom clock' for exampels.")
161 | hbox.pack_start(self.cf_entry)
162 | self.cf_button = gtk.Button()
163 | image = gtk.image_new_from_stock(gtk.STOCK_APPLY,
164 | gtk.ICON_SIZE_SMALL_TOOLBAR)
165 | self.cf_button.add(image)
166 | self.cf_button.connect("clicked", self.__set_custom_format)
167 | hbox.pack_start(self.cf_button)
168 |
169 | hbox = gtk.HBox()
170 | self.vbox.pack_start(hbox)
171 | label = gtk.Label(_("Text direction: "))
172 | hbox.pack_start(label)
173 | self.td_cbt = gtk.combo_box_new_text()
174 | self.td_cbt.append_text(_("default"))
175 | self.td_cbt.append_text(_("left-right"))
176 | self.td_cbt.append_text(_("top-down"))
177 | self.td_cbt.append_text(_("bottom-up"))
178 | self.td_cbt.connect("changed", self.__text_direction_changed)
179 | hbox.pack_start(self.td_cbt)
180 |
181 | self.show_all()
182 |
183 | def run(self):
184 | font = self.get_setting("font", "Sans 14")
185 | self.font_button.set_font_name(font)
186 | color = gtk.gdk.color_parse(self.get_setting("color", "#FFFFFF"))
187 | self.color_button.set_color(color)
188 | self.cf_entry.set_text(self.get_setting("custom_format",
189 | DEFAULT_CUSTOM_FORMAT))
190 | td = self.get_setting("text_direction", "default")
191 | tds = ["default", "left-right", "top-down", "bottom-up"]
192 | self.td_cbt.set_active(tds.index(td))
193 | cf = self.get_setting("use_custom_format", False)
194 | self.custom_clock_cb.set_active(cf)
195 | self.font_button.set_sensitive(not cf)
196 | self.color_button.set_sensitive(not cf)
197 | self.date_cb.set_sensitive(not cf)
198 | self.cf_entry.set_sensitive(cf)
199 | self.cf_button.set_sensitive(cf)
200 | return DockXAppletDialog.run(self)
201 |
202 | def __set_font(self, button):
203 | self.set_setting("font", button.get_font_name())
204 |
205 | def __color_set(self, button):
206 | # Read the value from color (and alpha) and write
207 | # it as 8-bit/channel hex string for gconf.
208 | # (Alpha is written like int (0-255).)
209 | color = button.get_color().to_string()
210 | # cs has 16-bit per color, we want 8.
211 | color = color[0:3] + color[5:7] + color[9:11]
212 | self.set_setting("color", color)
213 |
214 | def __cb_toggled(self, button, key):
215 | self.set_setting(key, button.get_active())
216 | if key == "use_custom_format":
217 | cf = button.get_active()
218 | self.font_button.set_sensitive(not cf)
219 | self.color_button.set_sensitive(not cf)
220 | self.date_cb.set_sensitive(not cf)
221 | self.cf_entry.set_sensitive(cf)
222 | self.cf_button.set_sensitive(cf)
223 |
224 | def __set_custom_format(self, *args):
225 | self.set_setting("custom_format", self.cf_entry.get_text())
226 |
227 | def __text_direction_changed(self, cbt):
228 | text = cbt.get_active_text()
229 | direction = {_("default"): "default",
230 | _("left-right"):"left-right",
231 | _("top-down"):"top-down",
232 | _("bottom-up"):"bottom-up"}.get(text, "default")
233 | self.set_setting("text_direction", direction)
234 |
235 | # All applets needs to have this functions
236 | def get_dbx_applet(dbx_dict):
237 | # This is the function that dockx will be calling.
238 | # Returns an instance of the applet.
239 | applet = ClockApplet(dbx_dict)
240 | return applet
241 |
242 | def run_applet_dialog(name):
243 | dialog = ClockAppletPreferences(name)
244 | dialog.run()
245 | dialog.destroy()
246 |
247 |
--------------------------------------------------------------------------------
/dockx_applets/hello_world.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=Hello World
3 | exec=hello_world.py
4 |
5 | @description
6 | Writes "Hello World" on the panel.
7 |
--------------------------------------------------------------------------------
/dockx_applets/hello_world.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # Hello world dockbarx applet
4 | #
5 | # Copyright 2011 Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see Hello World!")
30 | label.set_use_markup(True)
31 | # DockXApplet base class is pretty much a gtk.EventBox.
32 | # so all you have to do is adding your widget with self.add()
33 | self.add(label)
34 | label.show()
35 | self.show()
36 |
37 | #~ class HelloWorldPreferences(DockXAppletDialog):
38 | #~ Title = "Clock Applet Preference"
39 | #~
40 | #~ def __init__(self):
41 | #~ DockXAppletDialog.__init__(self, APPLET_NAME)
42 |
43 | #~ def run(self):
44 | #~ DockXApplet.run(self)
45 |
46 | # All applets needs to have this function
47 | def get_dbx_applet(dbx_dict):
48 | # This is the function that dockx will be calling.
49 | # Returns an instance of the applet.
50 | applet = HelloWorldApplet(dbx_dict)
51 | return applet
52 |
53 |
54 | #~ def run_applet_dialog():
55 | #~ dialog = HelloWorldPreferences()
56 | #~ dialog.run()
57 | #~ dialog.destroy()
58 |
59 |
--------------------------------------------------------------------------------
/dockx_applets/namebar.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=Namebar
3 | exec=namebar.py
4 |
5 | @description
6 | Shows the name and minimize/maximize/close buttons of the active or topmost maximized window.
7 |
--------------------------------------------------------------------------------
/dockx_applets/namebar_themes/Dust-ish.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/dockx_applets/namebar_themes/Dust-ish.tar.gz
--------------------------------------------------------------------------------
/dockx_applets/namebar_themes/Human-ish.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/dockx_applets/namebar_themes/Human-ish.tar.gz
--------------------------------------------------------------------------------
/dockx_applets/namebar_themes/New Wave-ish.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/dockx_applets/namebar_themes/New Wave-ish.tar.gz
--------------------------------------------------------------------------------
/dockx_applets/namebar_window_buttons.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=Window Buttons
3 | exec=namebar_window_buttons.py
4 |
5 | @description
6 | Shows minimize/maximize/close buttons for the active or the topmost maximized window.
7 |
--------------------------------------------------------------------------------
/dockx_applets/namebar_window_title.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=Window Title
3 | exec=namebar_window_title.py
4 |
5 | @description
6 | Shows the name of the active or the topmost maximized window.
7 |
--------------------------------------------------------------------------------
/dockx_applets/vc-themes/Black/index.theme:
--------------------------------------------------------------------------------
1 | [Icon Theme]
2 | Name=Black
3 |
4 | Directories=scalable
5 |
6 | [scalable]
7 | Size=48
8 | MaxSize=256
9 | Context=Apps
10 | Type=Scalable
11 |
12 |
--------------------------------------------------------------------------------
/dockx_applets/vc-themes/Minimal/index.theme:
--------------------------------------------------------------------------------
1 | [Icon Theme]
2 | Name=Minimal
3 |
4 | Directories=scalable
5 |
6 | [scalable]
7 | Size=48
8 | MaxSize=256
9 | Context=Apps
10 | Type=Scalable
11 |
12 |
--------------------------------------------------------------------------------
/dockx_applets/volume-control.applet:
--------------------------------------------------------------------------------
1 | @dbx applet
2 | name=Volume Control
3 | exec=volume-control.py
4 |
5 | @description
6 | Applet to control your computer's volume
7 |
--------------------------------------------------------------------------------
/dockx_applets/volume-control.ui:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
215 |
216 |
217 |
218 | True
219 | 1
220 | 6
221 |
222 |
223 | True
224 | 0
225 | audio-volume-low
226 |
227 |
228 | False
229 | 0
230 |
231 |
232 |
233 |
234 | True
235 | 0
236 | 0
237 | 3
238 |
239 |
240 | 180
241 | True
242 | True
243 | adjustment1
244 | False
245 | right
246 |
247 |
248 |
249 |
250 | 1
251 |
252 |
253 |
254 |
255 | True
256 | 0
257 | 4
258 |
259 |
260 | True
261 | 1
262 | 0
263 | 100%
264 | 5
265 |
266 |
267 |
268 |
269 | False
270 | 2
271 |
272 |
273 |
274 |
275 | True
276 | 0
277 | audio-volume-high
278 |
279 |
280 | False
281 | 3
282 |
283 |
284 |
285 |
286 | True
287 | 0
288 | 0
289 | 0
290 |
291 |
292 | _Mute
293 | True
294 | True
295 | False
296 | False
297 | True
298 | True
299 |
300 |
301 |
302 |
303 | False
304 | 4
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
--------------------------------------------------------------------------------
/icons/hicolor/128x128/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/128x128/apps/dockbarx.png
--------------------------------------------------------------------------------
/icons/hicolor/16x16/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/16x16/apps/dockbarx.png
--------------------------------------------------------------------------------
/icons/hicolor/22x22/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/22x22/apps/dockbarx.png
--------------------------------------------------------------------------------
/icons/hicolor/24x24/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/24x24/apps/dockbarx.png
--------------------------------------------------------------------------------
/icons/hicolor/36x36/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/36x36/apps/dockbarx.png
--------------------------------------------------------------------------------
/icons/hicolor/48x48/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/48x48/apps/dockbarx.png
--------------------------------------------------------------------------------
/icons/hicolor/64x64/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/64x64/apps/dockbarx.png
--------------------------------------------------------------------------------
/icons/hicolor/72x72/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/72x72/apps/dockbarx.png
--------------------------------------------------------------------------------
/icons/hicolor/96x96/apps/dockbarx.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/icons/hicolor/96x96/apps/dockbarx.png
--------------------------------------------------------------------------------
/make_translate_template.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | # Run this to make a dockbarx.pot template file for translation of dockbarx.
3 | xgettext --language=Python --keyword=_ --output=po/dockbarx.pot --from-code=UTF-8 `find . -name "*.py" -not -path "./build/*"` dockx dbx_preference dockbarx_factory
4 |
--------------------------------------------------------------------------------
/msgfmt.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | # Written by Martin v. Lwis
3 | # Plural forms support added by alexander smishlajev
4 | """
5 | Generate binary message catalog from textual translation description.
6 | This program converts a textual Uniforum-style message catalog (.po file) into
7 | a binary GNU catalog (.mo file). This is essentially the same function as the
8 | GNU msgfmt program, however, it is a simpler implementation.
9 |
10 | Usage: msgfmt.py [OPTIONS] filename.po
11 |
12 | Options:
13 | -o file
14 | --output-file=file
15 | Specify the output file to write to. If omitted, output will go to a
16 | file named filename.mo (based off the input file name).
17 | -h
18 | --help
19 | Print this message and exit.
20 |
21 | -V
22 | --version
23 | Display version information and exit.
24 | """
25 |
26 | import sys
27 | import os
28 | import getopt
29 | import struct
30 | import array
31 |
32 | __version__ = "1.1"
33 |
34 | MESSAGES = {}
35 |
36 |
37 | def usage (ecode, msg=""):
38 | """
39 | Print usage and msg and exit with given code.
40 | """
41 | print >> sys.stderr, __doc__
42 | if msg:
43 | print >> sys.stderr, msg
44 | sys.exit(ecode)
45 |
46 | def add (msgid, transtr, fuzzy):
47 | """
48 | Add a non-fuzzy translation to the dictionary.
49 | """
50 | global MESSAGES
51 | if not fuzzy and transtr and not transtr.startswith("\0"):
52 | MESSAGES[msgid] = transtr
53 |
54 | def generate ():
55 | """
56 | Return the generated output.
57 | """
58 | global MESSAGES
59 | keys = MESSAGES.keys()
60 | # the keys are sorted in the .mo file
61 | keys.sort()
62 | offsets = []
63 | ids = strs = ""
64 | for _id in keys:
65 | # For each string, we need size and file offset. Each string is NUL
66 | # terminated; the NUL does not count into the size.
67 | offsets.append((len(ids), len(_id), len(strs), len(MESSAGES[_id])))
68 | ids += _id + "\0"
69 | strs += MESSAGES[_id] + "\0"
70 | output = ""
71 | # The header is 7 32-bit unsigned integers. We don't use hash tables, so
72 | # the keys start right after the index tables.
73 | # translated string.
74 | keystart = 7*4+16*len(keys)
75 | # and the values start after the keys
76 | valuestart = keystart + len(ids)
77 | koffsets = []
78 | voffsets = []
79 | # The string table first has the list of keys, then the list of values.
80 | # Each entry has first the size of the string, then the file offset.
81 | for o1, l1, o2, l2 in offsets:
82 | koffsets += [l1, o1+keystart]
83 | voffsets += [l2, o2+valuestart]
84 | offsets = koffsets + voffsets
85 | output = struct.pack("Iiiiiii",
86 | 0x950412deL, # Magic
87 | 0, # Version
88 | len(keys), # # of entries
89 | 7*4, # start of key index
90 | 7*4+len(keys)*8, # start of value index
91 | 0, 0) # size and offset of hash table
92 | output += array.array("i", offsets).tostring()
93 | output += ids
94 | output += strs
95 | return output
96 |
97 |
98 | def make (filename, outfile):
99 | ID = 1
100 | STR = 2
101 | global MESSAGES
102 | MESSAGES = {}
103 |
104 | # Compute .mo name from .po name and arguments
105 | if filename.endswith(".po"):
106 | infile = filename
107 | else:
108 | infile = filename + ".po"
109 | if outfile is None:
110 | outfile = os.path.splitext(infile)[0] + ".mo"
111 |
112 | try:
113 | lines = open(infile).readlines()
114 | except IOError, msg:
115 | print >> sys.stderr, msg
116 | sys.exit(1)
117 | section = None
118 | fuzzy = 0
119 |
120 | # Parse the catalog
121 | msgid = msgstr = ""
122 | lno = 0
123 | for l in lines:
124 | lno += 1
125 | # If we get a comment line after a msgstr, this is a new entry
126 | if l[0] == "#" and section == STR:
127 | add(msgid, msgstr, fuzzy)
128 | section = None
129 | fuzzy = 0
130 | # Record a fuzzy mark
131 | if l[:2] == "#," and (l.find("fuzzy") >= 0):
132 | fuzzy = 1
133 | # Skip comments
134 | if l[0] == "#":
135 | continue
136 | # Start of msgid_plural section, separate from singular form with \0
137 | if l.startswith("msgid_plural"):
138 | msgid += "\0"
139 | l = l[12:]
140 | # Now we are in a msgid section, output previous section
141 | elif l.startswith("msgid"):
142 | if section == STR:
143 | add(msgid, msgstr, fuzzy)
144 | section = ID
145 | l = l[5:]
146 | msgid = msgstr = ""
147 | # Now we are in a msgstr section
148 | elif l.startswith("msgstr"):
149 | section = STR
150 | l = l[6:]
151 | # Check for plural forms
152 | if l.startswith("["):
153 | # Separate plural forms with \0
154 | if not l.startswith("[0]"):
155 | msgstr += "\0"
156 | # Ignore the index - must come in sequence
157 | l = l[l.index("]") + 1:]
158 | # Skip empty lines
159 | l = l.strip()
160 | if not l:
161 | continue
162 | # XXX: Does this always follow Python escape semantics?
163 | l = eval(l)
164 | if section == ID:
165 | msgid += l
166 | elif section == STR:
167 | msgstr += l
168 | else:
169 | print >> sys.stderr, "Syntax error on %s:%d" % (infile, lno), \
170 | "before:"
171 | print >> sys.stderr, l
172 | sys.exit(1)
173 | # Add last entry
174 | if section == STR:
175 | add(msgid, msgstr, fuzzy)
176 | # Compute output
177 | output = generate()
178 |
179 | try:
180 | open(outfile,"wb").write(output)
181 | except IOError,msg:
182 | print >> sys.stderr, msg
183 |
184 | def main ():
185 | try:
186 | opts, args = getopt.getopt(sys.argv[1:], "hVo:",
187 | ["help", "version", "output-file="])
188 | except getopt.error, msg:
189 | usage(1, msg)
190 |
191 | outfile = None
192 | # parse options
193 | for opt, arg in opts:
194 | if opt in ("-h", "--help"):
195 | usage(0)
196 | elif opt in ("-V", "--version"):
197 | print >> sys.stderr, "msgfmt.py", __version__
198 | sys.exit(0)
199 | elif opt in ("-o", "--output-file"):
200 | outfile = arg
201 | # do it
202 | if not args:
203 | print >> sys.stderr, "No input file given"
204 | print >> sys.stderr, "Try `msgfmt --help' for more information."
205 | return
206 |
207 | for filename in args:
208 | make(filename, outfile)
209 |
210 |
211 | if __name__ == "__main__":
212 | main()
213 |
--------------------------------------------------------------------------------
/po-themes/bg.po:
--------------------------------------------------------------------------------
1 | # Bulgarian translation for dockbar
2 | # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2011.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-10-10 12:40+0000\n"
12 | "Last-Translator: Svetoslav Stefanov \n"
13 | "Language-Team: Bulgarian \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Фон на списъка с прозорци"
22 |
23 | msgid "Normal text"
24 | msgstr "Нормален текст"
25 |
26 | msgid "Active window text"
27 | msgstr "Текст на активния прозорец"
28 |
29 | msgid "Active window"
30 | msgstr "Активен прозорец"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Текст на минимизирания прозорец"
34 |
35 | msgid "Active color"
36 | msgstr "Цвят на активния прозорец"
37 |
38 | msgid "Not used"
39 | msgstr "Не се използва"
40 |
41 | msgid "Active"
42 | msgstr "Активен"
43 |
44 | msgid "Launching color"
45 | msgstr "Цвят на стартиране"
46 |
47 | msgid "Attention color"
48 | msgstr "Цвят на внимание"
49 |
50 | msgid "Minimized color"
51 | msgstr "Цвят на минимизиран прозорец"
52 |
53 | msgid "Active glow"
54 | msgstr "Осветяване на активния прозорец"
55 |
56 | msgid "Button color"
57 | msgstr "Цвят на бутона"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Цвят на активния прозорец и индикатора"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Цвят на активния прозорец и точките"
64 |
--------------------------------------------------------------------------------
/po-themes/cs.po:
--------------------------------------------------------------------------------
1 | # Czech translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2010-12-07 19:39+0000\n"
12 | "Last-Translator: Matias Särs \n"
13 | "Language-Team: Czech \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Pozadí seznamu oken"
22 |
23 | msgid "Normal text"
24 | msgstr "Normální text"
25 |
26 | msgid "Active window text"
27 | msgstr "Text aktivního okna"
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr "Text minimalizovaného okna"
34 |
35 | msgid "Active color"
36 | msgstr "Aktivní barva"
37 |
38 | msgid "Not used"
39 | msgstr "Nepoužito"
40 |
41 | msgid "Active"
42 | msgstr "Aktivní"
43 |
44 | msgid "Launching color"
45 | msgstr "Barva spouštění"
46 |
47 | msgid "Attention color"
48 | msgstr "Barva upozornění"
49 |
50 | msgid "Minimized color"
51 | msgstr "Barva minimalizovaného"
52 |
53 | msgid "Active glow"
54 | msgstr "Záře aktivního"
55 |
56 | msgid "Button color"
57 | msgstr "Barva tlačítka"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Barva aktivní + indikátor"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Barva aktivní + tečky"
64 |
--------------------------------------------------------------------------------
/po-themes/da.po:
--------------------------------------------------------------------------------
1 | # Danish translation for dockbar
2 | # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2011.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-02-20 02:59+0000\n"
12 | "Last-Translator: Glenn Dufke \n"
13 | "Language-Team: Danish \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Vinduesliste baggrund"
22 |
23 | msgid "Normal text"
24 | msgstr "Normal tekst"
25 |
26 | msgid "Active window text"
27 | msgstr "Aktive vindues tekst"
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr "Minimeret vindues tekst"
34 |
35 | msgid "Active color"
36 | msgstr "Aktive farve"
37 |
38 | msgid "Not used"
39 | msgstr "Ikke brugt"
40 |
41 | msgid "Active"
42 | msgstr "Aktiv"
43 |
44 | msgid "Launching color"
45 | msgstr "Farve ved opstart"
46 |
47 | msgid "Attention color"
48 | msgstr "Farve ved opmærksomhed"
49 |
50 | msgid "Minimized color"
51 | msgstr "Farve ved minimeret"
52 |
53 | msgid "Active glow"
54 | msgstr "Aktive glød"
55 |
56 | msgid "Button color"
57 | msgstr "Knap farve"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Aktive + indikator farve"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Aktive + prik farve"
64 |
--------------------------------------------------------------------------------
/po-themes/de.po:
--------------------------------------------------------------------------------
1 | # German translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2012-02-24 00:15+0000\n"
12 | "Last-Translator: Macedon \n"
13 | "Language-Team: German \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Active window"
21 | msgstr "Aktive Fenster"
22 |
23 | msgid "Window list background"
24 | msgstr "Fensterlisten-Hintergrund"
25 |
26 | msgid "Normal text"
27 | msgstr "Normaler Text"
28 |
29 | msgid "Active window text"
30 | msgstr "Text eines aktiven Fensters"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Text eines minimierten Fensters"
34 |
35 | msgid "Active color"
36 | msgstr "Aktive Farbe"
37 |
38 | msgid "Not used"
39 | msgstr "Nicht verwendet"
40 |
41 | msgid "Active"
42 | msgstr "Aktiv"
43 |
44 | msgid "Launching color"
45 | msgstr "Startfarbe"
46 |
47 | msgid "Attention color"
48 | msgstr "Aufmerksamkeitsfarbe"
49 |
50 | msgid "Minimized color"
51 | msgstr "Farbe eines minimierten Fensters"
52 |
53 | msgid "Active glow"
54 | msgstr "Aktives Leuchten"
55 |
56 | msgid "Button color"
57 | msgstr "Knopffarbe"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Aktiv- + Anzeigefarbe"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Aktiv- + Punktefarbe"
64 |
--------------------------------------------------------------------------------
/po-themes/dockbarx-themes.pot:
--------------------------------------------------------------------------------
1 | #, fuzzy
2 | msgid ""
3 | msgstr ""
4 | "Project-Id-Version: PACKAGE VERSION\n"
5 | "Report-Msgid-Bugs-To: \n"
6 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
7 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
8 | "Last-Translator: FULL NAME \n"
9 | "Language-Team: LANGUAGE \n"
10 | "MIME-Version: 1.0\n"
11 | "Content-Type: text/plain; charset=UTF-8\n"
12 | "Content-Transfer-Encoding: 8bit\n"
13 | "X-Launchpad-Export-Date: 2011-09-29 20:48+0000\n"
14 | "X-Generator: Launchpad (build 14063)\n"
15 |
16 | msgid "Window list background"
17 | msgstr ""
18 |
19 | msgid "Normal text"
20 | msgstr ""
21 |
22 | msgid "Active window text"
23 | msgstr ""
24 |
25 | msgid "Active window"
26 | msgstr ""
27 |
28 | msgid "Minimized window text"
29 | msgstr ""
30 |
31 | msgid "Active color"
32 | msgstr ""
33 |
34 | msgid "Not used"
35 | msgstr ""
36 |
37 | msgid "Active"
38 | msgstr ""
39 |
40 | msgid "Launching color"
41 | msgstr ""
42 |
43 | msgid "Attention color"
44 | msgstr ""
45 |
46 | msgid "Minimized color"
47 | msgstr ""
48 |
49 | msgid "Active glow"
50 | msgstr ""
51 |
52 | msgid "Button color"
53 | msgstr ""
54 |
55 | # Theme unite_v
56 | msgid "Active + indicator color"
57 | msgstr ""
58 |
59 | # Theme Dock[_v]
60 | msgid "Active + dots color"
61 | msgstr ""
62 |
--------------------------------------------------------------------------------
/po-themes/el.po:
--------------------------------------------------------------------------------
1 | # Greek translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2010-10-03 23:49+0000\n"
12 | "Last-Translator: Matias Särs \n"
13 | "Language-Team: Greek \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr ""
22 |
23 | msgid "Normal text"
24 | msgstr "Κανονικό κείμενο"
25 |
26 | msgid "Active window text"
27 | msgstr "Κείμενο ενεργού παραθύρου"
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr "Κείμενο ελαχιστοποιημένου παραθύρου"
34 |
35 | msgid "Active color"
36 | msgstr "Ενεργό χρώμα"
37 |
38 | msgid "Not used"
39 | msgstr "Δε χρησιμοποιείται"
40 |
41 | msgid "Active"
42 | msgstr "Ενεργό"
43 |
44 | msgid "Launching color"
45 | msgstr "Χρώμα εκκίνησης"
46 |
47 | msgid "Attention color"
48 | msgstr "Χρώμα προσοχής"
49 |
50 | msgid "Minimized color"
51 | msgstr ""
52 |
53 | msgid "Active glow"
54 | msgstr "Λάμψη ενεργού παραθύρου"
55 |
56 | msgid "Button color"
57 | msgstr "Χρώμα κουμπιού"
58 |
59 | msgid "Active + indicator color"
60 | msgstr ""
61 |
62 | msgid "Active + dots color"
63 | msgstr ""
64 |
--------------------------------------------------------------------------------
/po-themes/en_GB.po:
--------------------------------------------------------------------------------
1 | # English (United Kingdom) translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-09-02 18:06+0000\n"
12 | "Last-Translator: Anthony Harrington \n"
13 | "Language-Team: English (United Kingdom) \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Window list background"
22 |
23 | msgid "Normal text"
24 | msgstr "Normal text"
25 |
26 | msgid "Active window text"
27 | msgstr "Active window text"
28 |
29 | msgid "Active window"
30 | msgstr "Active window"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Minimised window text"
34 |
35 | msgid "Active color"
36 | msgstr "Active colour"
37 |
38 | msgid "Not used"
39 | msgstr "Not used"
40 |
41 | msgid "Active"
42 | msgstr "Active"
43 |
44 | msgid "Launching color"
45 | msgstr "Launching colour"
46 |
47 | msgid "Attention color"
48 | msgstr "Attention colour"
49 |
50 | msgid "Minimized color"
51 | msgstr "Minimised colour"
52 |
53 | msgid "Active glow"
54 | msgstr "Active glow"
55 |
56 | msgid "Button color"
57 | msgstr "Button colour"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Active + indicator colour"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Active + dots colour"
64 |
--------------------------------------------------------------------------------
/po-themes/es.po:
--------------------------------------------------------------------------------
1 | # Spanish translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2012-01-06 12:16+0000\n"
12 | "Last-Translator: Marti Bosch \n"
13 | "Language-Team: Spanish \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Fondo de la lista de ventanas"
22 |
23 | msgid "Normal text"
24 | msgstr "Texto normal"
25 |
26 | msgid "Active window text"
27 | msgstr "Texto para la ventana activa"
28 |
29 | msgid "Active window"
30 | msgstr "Ventana activa"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Texto para ventana minimizada"
34 |
35 | msgid "Active color"
36 | msgstr "Color activo"
37 |
38 | msgid "Not used"
39 | msgstr "No usado"
40 |
41 | msgid "Active"
42 | msgstr "Activo"
43 |
44 | msgid "Launching color"
45 | msgstr "Color al abrir"
46 |
47 | msgid "Attention color"
48 | msgstr "Color de atención"
49 |
50 | msgid "Minimized color"
51 | msgstr "Color al minimizar"
52 |
53 | msgid "Active glow"
54 | msgstr "Resplandor activo"
55 |
56 | msgid "Button color"
57 | msgstr "Color de botón"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Color activo + indicador"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Active + puntos de colores"
64 |
--------------------------------------------------------------------------------
/po-themes/eu.po:
--------------------------------------------------------------------------------
1 | # Basque translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2010-12-08 20:03+0000\n"
12 | "Last-Translator: Ander Elortondo \n"
13 | "Language-Team: Basque \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Leiho zerrendaren atzeko planoa"
22 |
23 | msgid "Normal text"
24 | msgstr "Testu normala"
25 |
26 | msgid "Active window text"
27 | msgstr "Leiho aktiboaren testua"
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr "Leiho minimizatuaren testua"
34 |
35 | msgid "Active color"
36 | msgstr "Aktiboaren kolorea"
37 |
38 | msgid "Not used"
39 | msgstr "Erabili gabe"
40 |
41 | msgid "Active"
42 | msgstr "Aktiboa"
43 |
44 | msgid "Launching color"
45 | msgstr "Abiarazten kolorea"
46 |
47 | msgid "Attention color"
48 | msgstr "Harreta kolorea"
49 |
50 | msgid "Minimized color"
51 | msgstr "Minimizatu kolorea"
52 |
53 | msgid "Active glow"
54 | msgstr "Aktiboaren disdira"
55 |
56 | msgid "Button color"
57 | msgstr "Botoi kolorea"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Aktiboa + adierazlea kolorea"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Aktiboa + puntuak kolorea"
64 |
--------------------------------------------------------------------------------
/po-themes/fi.po:
--------------------------------------------------------------------------------
1 | # Finnish translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-10-09 21:20+0000\n"
12 | "Last-Translator: Jiri Grönroos \n"
13 | "Language-Team: Finnish \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Ikkunalistan tausta"
22 |
23 | msgid "Normal text"
24 | msgstr "Tavallinen teksti"
25 |
26 | msgid "Active window text"
27 | msgstr "Aktiivisen ikkunan teksti"
28 |
29 | msgid "Active window"
30 | msgstr "Aktiivinen ikkuna"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Pienennetyn ikkunan teksti"
34 |
35 | msgid "Active color"
36 | msgstr "Aktiivinen väri"
37 |
38 | msgid "Not used"
39 | msgstr "Ei käytössä"
40 |
41 | msgid "Active"
42 | msgstr "Käytössä"
43 |
44 | msgid "Launching color"
45 | msgstr "Käynnistysväri"
46 |
47 | msgid "Attention color"
48 | msgstr "Huomioväri"
49 |
50 | msgid "Minimized color"
51 | msgstr "Pienennettyjen väri"
52 |
53 | msgid "Active glow"
54 | msgstr "Aktiivinen hehku"
55 |
56 | msgid "Button color"
57 | msgstr "Painikkeen väri"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Aktiivinen + ilmoittimen väri"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Aktiivinen + pisteiden väri"
64 |
--------------------------------------------------------------------------------
/po-themes/fr.po:
--------------------------------------------------------------------------------
1 | # French translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-11-20 16:17+0000\n"
12 | "Last-Translator: Aurélien RIVIERE \n"
13 | "Language-Team: French \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Arrière-plan de la liste des fenêtres"
22 |
23 | msgid "Normal text"
24 | msgstr "Texte normal"
25 |
26 | msgid "Active window text"
27 | msgstr "Texte de la fenêtre active"
28 |
29 | msgid "Active window"
30 | msgstr "Fenêtre active"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Texte de la fenêtre minimisée"
34 |
35 | msgid "Active color"
36 | msgstr "Couleur active"
37 |
38 | msgid "Not used"
39 | msgstr "Non utilisé"
40 |
41 | msgid "Active"
42 | msgstr "Active"
43 |
44 | msgid "Launching color"
45 | msgstr "Couleur de lancement"
46 |
47 | msgid "Attention color"
48 | msgstr "Couleur de demande d'attention"
49 |
50 | msgid "Minimized color"
51 | msgstr "Couleur minimisée"
52 |
53 | msgid "Active glow"
54 | msgstr "Lueur active"
55 |
56 | msgid "Button color"
57 | msgstr "Couleur du bouton"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Active + indicateur de couleur"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Active + points de couleur"
64 |
--------------------------------------------------------------------------------
/po-themes/hu.po:
--------------------------------------------------------------------------------
1 | # Hungarian translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2012-06-13 17:03+0000\n"
12 | "Last-Translator: Molditz György \n"
13 | "Language-Team: Hungarian \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Ablak lista háttér"
22 |
23 | msgid "Normal text"
24 | msgstr "Normál szöveg"
25 |
26 | msgid "Active window text"
27 | msgstr "Aktív ablak szöveg"
28 |
29 | msgid "Active window"
30 | msgstr "Aktív ablak"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Minimalizált ablak szöveg"
34 |
35 | msgid "Active color"
36 | msgstr "Aktív szín"
37 |
38 | msgid "Not used"
39 | msgstr "Nem használt"
40 |
41 | msgid "Active"
42 | msgstr "Aktív"
43 |
44 | msgid "Launching color"
45 | msgstr "Indítás színe"
46 |
47 | msgid "Attention color"
48 | msgstr "Figyelmeztetés színe"
49 |
50 | msgid "Minimized color"
51 | msgstr "Minimalizált szín"
52 |
53 | msgid "Active glow"
54 | msgstr "Aktív fény"
55 |
56 | msgid "Button color"
57 | msgstr "Gomb színe"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Aktív + jelző szín"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Aktív + pontok színe"
64 |
--------------------------------------------------------------------------------
/po-themes/it.po:
--------------------------------------------------------------------------------
1 | # Italian translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-09-21 19:54+0000\n"
12 | "Last-Translator: simone.sandri \n"
13 | "Language-Team: Italian \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Sfondo lista finestre"
22 |
23 | msgid "Normal text"
24 | msgstr "Testo normale"
25 |
26 | msgid "Active window text"
27 | msgstr "Testo della finestra attiva"
28 |
29 | msgid "Active window"
30 | msgstr "Finestra attiva"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Testo della finestra minimizzata"
34 |
35 | msgid "Active color"
36 | msgstr "Colore attivo"
37 |
38 | msgid "Not used"
39 | msgstr "Non usato"
40 |
41 | msgid "Active"
42 | msgstr "Attiva"
43 |
44 | msgid "Launching color"
45 | msgstr "Colore al lancio"
46 |
47 | msgid "Attention color"
48 | msgstr "Colore ad una richiesta di attenzione"
49 |
50 | msgid "Minimized color"
51 | msgstr "Colore dell'applicazione minimizzata"
52 |
53 | msgid "Active glow"
54 | msgstr "Bagliore del pulsante attivo"
55 |
56 | msgid "Button color"
57 | msgstr "Colore del pulsante"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Colore del pulsante attivo (con indicatore)"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Colore del pulsante attivo (con punto)"
64 |
--------------------------------------------------------------------------------
/po-themes/ja.po:
--------------------------------------------------------------------------------
1 | # Japanese translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-09-18 02:34+0000\n"
12 | "Last-Translator: kawaji \n"
13 | "Language-Team: Japanese \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "ウィンドウリストの背景"
22 |
23 | msgid "Normal text"
24 | msgstr "通常時の文字"
25 |
26 | msgid "Active window text"
27 | msgstr "アクティブウィンドウの文字"
28 |
29 | msgid "Active window"
30 | msgstr "アクティブウィンドウ"
31 |
32 | msgid "Minimized window text"
33 | msgstr "最小化ウィンドウの文字"
34 |
35 | msgid "Active color"
36 | msgstr "アクティブ時の色"
37 |
38 | msgid "Not used"
39 | msgstr "不使用"
40 |
41 | msgid "Active"
42 | msgstr "アクティブ時"
43 |
44 | msgid "Launching color"
45 | msgstr "起動途中時の色"
46 |
47 | msgid "Attention color"
48 | msgstr "注意要求時の色"
49 |
50 | msgid "Minimized color"
51 | msgstr "最小化時の色"
52 |
53 | msgid "Active glow"
54 | msgstr "アクティブ時の発光"
55 |
56 | msgid "Button color"
57 | msgstr "ボタンの色"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "アクティブ時+インジケータの色"
61 |
62 | msgid "Active + dots color"
63 | msgstr "アクティブ時+ドットの色"
64 |
--------------------------------------------------------------------------------
/po-themes/ko.po:
--------------------------------------------------------------------------------
1 | # Korean translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-09-04 06:39+0000\n"
12 | "Last-Translator: Kim Boram \n"
13 | "Language-Team: Kim Boram \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "창 목록 배경"
22 |
23 | msgid "Normal text"
24 | msgstr "보통 글자"
25 |
26 | msgid "Active window text"
27 | msgstr "사용 중인 창 글자"
28 |
29 | msgid "Active window"
30 | msgstr "활성 창"
31 |
32 | msgid "Minimized window text"
33 | msgstr "최소화된 창 글자"
34 |
35 | msgid "Active color"
36 | msgstr "사용 중인 창 강조"
37 |
38 | msgid "Not used"
39 | msgstr "사용하지 않음"
40 |
41 | msgid "Active"
42 | msgstr "사용 중"
43 |
44 | msgid "Launching color"
45 | msgstr "실행 중인 것을 나타낼 색"
46 |
47 | msgid "Attention color"
48 | msgstr "주의가 필요한 것을 나타낼 색"
49 |
50 | msgid "Minimized color"
51 | msgstr "최소화된 창 색"
52 |
53 | msgid "Active glow"
54 | msgstr "사용 중인 창 발광"
55 |
56 | msgid "Button color"
57 | msgstr "단추 색"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "사용 중 + 알리미 색"
61 |
62 | msgid "Active + dots color"
63 | msgstr "사용 중 + 점 색"
64 |
--------------------------------------------------------------------------------
/po-themes/lt.po:
--------------------------------------------------------------------------------
1 | # Lithuanian translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2010-12-07 19:35+0000\n"
12 | "Last-Translator: Mantas Kriaučiūnas \n"
13 | "Language-Team: Lithuanian \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr ""
22 |
23 | msgid "Normal text"
24 | msgstr "Normalus tekstas"
25 |
26 | msgid "Active window text"
27 | msgstr ""
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr ""
34 |
35 | msgid "Active color"
36 | msgstr ""
37 |
38 | msgid "Not used"
39 | msgstr ""
40 |
41 | msgid "Active"
42 | msgstr "Aktyvus"
43 |
44 | msgid "Launching color"
45 | msgstr ""
46 |
47 | msgid "Attention color"
48 | msgstr ""
49 |
50 | msgid "Minimized color"
51 | msgstr ""
52 |
53 | msgid "Active glow"
54 | msgstr ""
55 |
56 | msgid "Button color"
57 | msgstr "Mygtuko spalva"
58 |
59 | msgid "Active + indicator color"
60 | msgstr ""
61 |
62 | msgid "Active + dots color"
63 | msgstr ""
64 |
--------------------------------------------------------------------------------
/po-themes/nl.po:
--------------------------------------------------------------------------------
1 | # Dutch translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-12-07 15:52+0000\n"
12 | "Last-Translator: Justin van Beusekom \n"
13 | "Language-Team: Dutch \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Schermlijst achtergrond"
22 |
23 | msgid "Normal text"
24 | msgstr "Normale tekst"
25 |
26 | msgid "Active window text"
27 | msgstr "Tekst in actief venster"
28 |
29 | msgid "Active window"
30 | msgstr "Actief venster"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Tekst in geminimaliseerd venster"
34 |
35 | msgid "Active color"
36 | msgstr "Actieve kleur"
37 |
38 | msgid "Not used"
39 | msgstr "Niet gebruikt"
40 |
41 | msgid "Active"
42 | msgstr "Actief"
43 |
44 | msgid "Launching color"
45 | msgstr "Opstartkleur"
46 |
47 | msgid "Attention color"
48 | msgstr "Opvallende kleur"
49 |
50 | msgid "Minimized color"
51 | msgstr "Geminimaliseerde kleur"
52 |
53 | msgid "Active glow"
54 | msgstr "Actieve gloed"
55 |
56 | msgid "Button color"
57 | msgstr "Knop kleur"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Actieve + aanwijzer kleur"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Actief + stippellijn kleur"
64 |
--------------------------------------------------------------------------------
/po-themes/pl.po:
--------------------------------------------------------------------------------
1 | # Polish translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2010-11-18 22:34+0000\n"
12 | "Last-Translator: Solve \n"
13 | "Language-Team: Polish \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Tło listy okien"
22 |
23 | msgid "Normal text"
24 | msgstr "Zwykły tekst"
25 |
26 | msgid "Active window text"
27 | msgstr "Tekst aktywnego okna"
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr "Tekst zminimalizowanego okna"
34 |
35 | msgid "Active color"
36 | msgstr "Kolor aktywnej pozycji"
37 |
38 | msgid "Not used"
39 | msgstr "Nieużywane"
40 |
41 | msgid "Active"
42 | msgstr "Aktywne"
43 |
44 | msgid "Launching color"
45 | msgstr "Kolor uruchamianego"
46 |
47 | msgid "Attention color"
48 | msgstr "Kolor ostrzeżenia"
49 |
50 | msgid "Minimized color"
51 | msgstr "Kolor zminimalizowanego"
52 |
53 | msgid "Active glow"
54 | msgstr "Poświata aktywnego"
55 |
56 | msgid "Button color"
57 | msgstr "Kolor przycisku"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Kolor aktywnego + powiadomienia"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Kolor aktywnego + kropek"
64 |
--------------------------------------------------------------------------------
/po-themes/pt_BR.po:
--------------------------------------------------------------------------------
1 | # Brazilian Portuguese translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-09-02 19:59+0000\n"
12 | "Last-Translator: Matheus de Araújo \n"
13 | "Language-Team: Brazilian Portuguese \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Plano de fundo da lista de janelas"
22 |
23 | msgid "Normal text"
24 | msgstr "Texto normal"
25 |
26 | msgid "Active window text"
27 | msgstr "Texto da janela ativa"
28 |
29 | msgid "Active window"
30 | msgstr "Janela ativa"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Texto da janela minimizada"
34 |
35 | msgid "Active color"
36 | msgstr "Cor ativa"
37 |
38 | msgid "Not used"
39 | msgstr "Não utilizado"
40 |
41 | msgid "Active"
42 | msgstr "Ativo"
43 |
44 | msgid "Launching color"
45 | msgstr "Cor ao iniciar aplicativo"
46 |
47 | msgid "Attention color"
48 | msgstr "Cor de atenção"
49 |
50 | msgid "Minimized color"
51 | msgstr "Cor de minimizado"
52 |
53 | msgid "Active glow"
54 | msgstr "Brilho ativo"
55 |
56 | msgid "Button color"
57 | msgstr "Cor do botão"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Ativo + cor indicadora"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Ativo + cor dos pontos"
64 |
--------------------------------------------------------------------------------
/po-themes/ro.po:
--------------------------------------------------------------------------------
1 | # Romanian translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2012-07-29 21:41+0000\n"
12 | "Last-Translator: Cristian Moldovan \n"
13 | "Language-Team: Romanian \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Fundal listă ferestre"
22 |
23 | msgid "Normal text"
24 | msgstr "Text normal"
25 |
26 | msgid "Active window text"
27 | msgstr "Text fereastră activă"
28 |
29 | msgid "Active window"
30 | msgstr "Fereastră activă"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Text fereastră minimizată"
34 |
35 | msgid "Active color"
36 | msgstr "Culoare activă"
37 |
38 | msgid "Not used"
39 | msgstr "Nefolosit"
40 |
41 | msgid "Active"
42 | msgstr "Activ"
43 |
44 | msgid "Launching color"
45 | msgstr "Culoare lansare"
46 |
47 | msgid "Attention color"
48 | msgstr "Culoare atenție"
49 |
50 | msgid "Minimized color"
51 | msgstr "Culoare minimizată"
52 |
53 | msgid "Active glow"
54 | msgstr "Strălucire activă"
55 |
56 | msgid "Button color"
57 | msgstr "Culoare buton"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Culoare activă + indicator"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Culoare activă + puncte"
64 |
--------------------------------------------------------------------------------
/po-themes/ru.po:
--------------------------------------------------------------------------------
1 | # Russian translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-12-15 20:33+0000\n"
12 | "Last-Translator: ZwS \n"
13 | "Language-Team: Russian \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Фон списка окон"
22 |
23 | msgid "Normal text"
24 | msgstr "Обычный текст"
25 |
26 | msgid "Active window text"
27 | msgstr "Текст активного окна"
28 |
29 | msgid "Active window"
30 | msgstr "Активное окно"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Текст свернутого окна"
34 |
35 | msgid "Active color"
36 | msgstr "Активный цвет"
37 |
38 | msgid "Not used"
39 | msgstr "Не используется"
40 |
41 | msgid "Active"
42 | msgstr "Активно"
43 |
44 | msgid "Launching color"
45 | msgstr "Цвет запуска"
46 |
47 | msgid "Attention color"
48 | msgstr "Цвет привлечения внимания"
49 |
50 | msgid "Minimized color"
51 | msgstr "Цвет скрытого приложения"
52 |
53 | msgid "Active glow"
54 | msgstr "Свечение активности"
55 |
56 | msgid "Button color"
57 | msgstr "Цвет кнопки"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Цвет активность + индикатор"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Цвет активность + точки"
64 |
--------------------------------------------------------------------------------
/po-themes/sk.po:
--------------------------------------------------------------------------------
1 | # Slovak translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2011-01-15 17:28+0000\n"
12 | "Last-Translator: Marcel \n"
13 | "Language-Team: Slovak \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Pozadie zoznamu okien"
22 |
23 | msgid "Normal text"
24 | msgstr "Normálny text"
25 |
26 | msgid "Active window text"
27 | msgstr "Text aktívneho okna"
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr "Text minimalizovaného okna"
34 |
35 | msgid "Active color"
36 | msgstr "Aktívna farba"
37 |
38 | msgid "Not used"
39 | msgstr "Nepoužíva sa"
40 |
41 | msgid "Active"
42 | msgstr "Aktívne"
43 |
44 | msgid "Launching color"
45 | msgstr "Farba pri spúšťaní"
46 |
47 | msgid "Attention color"
48 | msgstr "Farba pozornosť"
49 |
50 | msgid "Minimized color"
51 | msgstr "Farba minimalizované"
52 |
53 | msgid "Active glow"
54 | msgstr "Aktivovať žiaru"
55 |
56 | msgid "Button color"
57 | msgstr "Farba tlačidla"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Aktívne + farba indikátora"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Aktívne + farba bodiek"
64 |
--------------------------------------------------------------------------------
/po-themes/sv.po:
--------------------------------------------------------------------------------
1 | # Tranlation template for DockbarX.
2 | # Copyright (C) 2010 Matias Sars
3 | # This file is distributed under the same GPL and BSD.
4 | msgid ""
5 | msgstr ""
6 | "Project-Id-Version: dockbarx-themes\n"
7 | "Report-Msgid-Bugs-To: \n"
8 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
9 | "PO-Revision-Date: 2012-03-09 16:26+0000\n"
10 | "Last-Translator: Rikard Edgren \n"
11 | "Language-Team: Launchpad Swedish Translators \n"
13 | "MIME-Version: 1.0\n"
14 | "Content-Type: text/plain; charset=utf-8\n"
15 | "Content-Transfer-Encoding: 8bit\n"
16 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
17 | "X-Generator: Launchpad (build 16165)\n"
18 | "X-Poedit-Language: Swedish\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Fönsterlistans bakgrund"
22 |
23 | msgid "Normal text"
24 | msgstr "Normal text"
25 |
26 | msgid "Active window text"
27 | msgstr "Text för aktivt fönster"
28 |
29 | msgid "Active window"
30 | msgstr "Aktivt fönster"
31 |
32 | msgid "Minimized window text"
33 | msgstr "Text för minimierat fönster"
34 |
35 | msgid "Active color"
36 | msgstr "Aktiv färg"
37 |
38 | msgid "Not used"
39 | msgstr "Används inte"
40 |
41 | msgid "Active"
42 | msgstr "Aktiv"
43 |
44 | msgid "Launching color"
45 | msgstr "Färg vid programstart"
46 |
47 | msgid "Attention color"
48 | msgstr "Färg för uppmärksamhet"
49 |
50 | msgid "Minimized color"
51 | msgstr "Färg vid minimering"
52 |
53 | msgid "Active glow"
54 | msgstr "Aktiv glöd"
55 |
56 | msgid "Button color"
57 | msgstr "Knappfärg"
58 |
59 | # Theme unite_v
60 | msgid "Active + indicator color"
61 | msgstr "Aktiv + indikatorfärg"
62 |
63 | # Theme Dock[_v]
64 | msgid "Active + dots color"
65 | msgstr "Aktiv + punktfärg"
66 |
--------------------------------------------------------------------------------
/po-themes/th.po:
--------------------------------------------------------------------------------
1 | # Thai translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2010-08-08 10:01+0000\n"
12 | "Last-Translator: Matias Särs \n"
13 | "Language-Team: Thai \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr ""
22 |
23 | msgid "Normal text"
24 | msgstr ""
25 |
26 | msgid "Active window text"
27 | msgstr ""
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr ""
34 |
35 | msgid "Active color"
36 | msgstr ""
37 |
38 | msgid "Not used"
39 | msgstr "ไม่ใช้"
40 |
41 | msgid "Active"
42 | msgstr "เปิดใช้งาน"
43 |
44 | msgid "Launching color"
45 | msgstr ""
46 |
47 | msgid "Attention color"
48 | msgstr ""
49 |
50 | msgid "Minimized color"
51 | msgstr ""
52 |
53 | msgid "Active glow"
54 | msgstr ""
55 |
56 | msgid "Button color"
57 | msgstr ""
58 |
59 | msgid "Active + indicator color"
60 | msgstr ""
61 |
62 | msgid "Active + dots color"
63 | msgstr ""
64 |
--------------------------------------------------------------------------------
/po-themes/uk.po:
--------------------------------------------------------------------------------
1 | # Ukrainian translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2010-12-07 19:32+0000\n"
12 | "Last-Translator: Matias Särs \n"
13 | "Language-Team: Ukrainian \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "Колір фону перегляду мініатюр"
22 |
23 | msgid "Normal text"
24 | msgstr "Звичайний текст"
25 |
26 | msgid "Active window text"
27 | msgstr "Текст активного вікна"
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr "Текст мінімізованого вікна"
34 |
35 | msgid "Active color"
36 | msgstr "Активний колір"
37 |
38 | msgid "Not used"
39 | msgstr "Не використовується"
40 |
41 | msgid "Active"
42 | msgstr "Активний"
43 |
44 | msgid "Launching color"
45 | msgstr "Колір кнопок запуску"
46 |
47 | msgid "Attention color"
48 | msgstr "Колір звертання уваги"
49 |
50 | msgid "Minimized color"
51 | msgstr "Колір мінімізованого вікна"
52 |
53 | msgid "Active glow"
54 | msgstr "Активне світіння"
55 |
56 | msgid "Button color"
57 | msgstr "Колір кнопок"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "Колір активності та індикатору"
61 |
62 | msgid "Active + dots color"
63 | msgstr "Колір активності та крапок"
64 |
--------------------------------------------------------------------------------
/po-themes/zh_CN.po:
--------------------------------------------------------------------------------
1 | # Chinese (Simplified) translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2012-10-18 11:43+0000\n"
12 | "Last-Translator: 张海 \n"
13 | "Language-Team: Chinese (Simplified) \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "窗口列表背景"
22 |
23 | msgid "Normal text"
24 | msgstr "普通文本"
25 |
26 | msgid "Active window text"
27 | msgstr "活动窗口文本"
28 |
29 | msgid "Active window"
30 | msgstr "活动窗口"
31 |
32 | msgid "Minimized window text"
33 | msgstr "最小化窗口文本"
34 |
35 | msgid "Active color"
36 | msgstr "活动颜色"
37 |
38 | msgid "Not used"
39 | msgstr "未使用"
40 |
41 | msgid "Active"
42 | msgstr "活动"
43 |
44 | msgid "Launching color"
45 | msgstr "正在启动颜色"
46 |
47 | msgid "Attention color"
48 | msgstr "焦点颜色"
49 |
50 | msgid "Minimized color"
51 | msgstr "最小化颜色"
52 |
53 | msgid "Active glow"
54 | msgstr "活动发光"
55 |
56 | msgid "Button color"
57 | msgstr "按钮颜色"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "活动指示器颜色"
61 |
62 | msgid "Active + dots color"
63 | msgstr "活动点颜色"
64 |
--------------------------------------------------------------------------------
/po-themes/zh_TW.po:
--------------------------------------------------------------------------------
1 | # Chinese (Traditional) translation for dockbar
2 | # Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010
3 | # This file is distributed under the same license as the dockbar package.
4 | # FIRST AUTHOR , 2010.
5 | #
6 | msgid ""
7 | msgstr ""
8 | "Project-Id-Version: dockbar\n"
9 | "Report-Msgid-Bugs-To: FULL NAME \n"
10 | "POT-Creation-Date: 2010-06-09 13:23+0300\n"
11 | "PO-Revision-Date: 2010-12-07 19:27+0000\n"
12 | "Last-Translator: Matias Särs \n"
13 | "Language-Team: Chinese (Traditional) \n"
14 | "MIME-Version: 1.0\n"
15 | "Content-Type: text/plain; charset=UTF-8\n"
16 | "Content-Transfer-Encoding: 8bit\n"
17 | "X-Launchpad-Export-Date: 2012-10-20 14:31+0000\n"
18 | "X-Generator: Launchpad (build 16165)\n"
19 |
20 | msgid "Window list background"
21 | msgstr "視窗清單背景"
22 |
23 | msgid "Normal text"
24 | msgstr "普通文字"
25 |
26 | msgid "Active window text"
27 | msgstr "執行中視窗文字"
28 |
29 | msgid "Active window"
30 | msgstr ""
31 |
32 | msgid "Minimized window text"
33 | msgstr "最小化視窗文字"
34 |
35 | msgid "Active color"
36 | msgstr "執行中顏色"
37 |
38 | msgid "Not used"
39 | msgstr "並未使用"
40 |
41 | msgid "Active"
42 | msgstr "執行中"
43 |
44 | msgid "Launching color"
45 | msgstr "啟動中顏色"
46 |
47 | msgid "Attention color"
48 | msgstr "焦點顏色"
49 |
50 | msgid "Minimized color"
51 | msgstr "最小化顏色"
52 |
53 | msgid "Active glow"
54 | msgstr "執行中光暈"
55 |
56 | msgid "Button color"
57 | msgstr "按鈕顏色"
58 |
59 | msgid "Active + indicator color"
60 | msgstr "執行中標識符顏色"
61 |
62 | msgid "Active + dots color"
63 | msgstr "執行中的點顏色"
64 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/python2
2 |
3 | # groupbutton.py
4 | #
5 | # Copyright 2010 Matias Sars
6 | #
7 | # DockbarX is free software: you can redistribute it and/or modify
8 | # it under the terms of the GNU General Public License as published by
9 | # the Free Software Foundation, either version 3 of the License, or
10 | # (at your option) any later version.
11 | #
12 | # DockbarX is distributed in the hope that it will be useful,
13 | # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | # GNU General Public License for more details.
16 | #
17 | # You should have received a copy of the GNU General Public License
18 | # along with dockbar. If not, see .
19 |
20 | from distutils.core import setup
21 | from distutils.core import setup
22 | from distutils import cmd
23 | from distutils.command.install_data import install_data as _install_data
24 | from distutils.command.build import build as _build
25 |
26 | import msgfmt
27 | import os
28 | import sys
29 |
30 | VERSION = "0.93"
31 |
32 | class build_trans(cmd.Command):
33 | description = "Compile .po files into .mo files"
34 | def initialize_options(self):
35 | pass
36 |
37 | def finalize_options(self):
38 | pass
39 |
40 | def run(self):
41 | po_dict = {
42 | "dockbarx": os.path.join(os.path.dirname(os.curdir), "po"),
43 | "dockbarx-themes": os.path.join(os.path.dirname(os.curdir), "po-themes")
44 | }
45 | for (mo_file, po_dir) in po_dict.items():
46 | for path, names, filenames in os.walk(po_dir):
47 | for f in filenames:
48 | if f.endswith(".po"):
49 | lang = f[:len(f) - 3]
50 | src = os.path.join(path, f)
51 | dest_path = os.path.join("build", "locale", lang, "LC_MESSAGES")
52 | dest = os.path.join(dest_path, "%s.mo"%mo_file)
53 | if not os.path.exists(dest_path):
54 | os.makedirs(dest_path)
55 | if not os.path.exists(dest):
56 | print "Compiling %s for %s" % (src, mo_file)
57 | msgfmt.make(src, dest)
58 | else:
59 | src_mtime = os.stat(src)[8]
60 | dest_mtime = os.stat(dest)[8]
61 | if src_mtime > dest_mtime:
62 | print "Compiling %s for %s" % (src, mo_file)
63 | msgfmt.make(src, dest)
64 |
65 | class build(_build):
66 | sub_commands = _build.sub_commands + [("build_trans", None)]
67 | def run(self):
68 | _build.run(self)
69 |
70 | class install_data(_install_data):
71 |
72 | def run(self):
73 | for lang in os.listdir("build/locale/"):
74 | lang_dir = os.path.join("/", "usr", "share",
75 | "locale", lang, "LC_MESSAGES")
76 | lang_files = []
77 | d_file = os.path.join("build", "locale", lang,
78 | "LC_MESSAGES", "dockbarx.mo")
79 | dt_file = os.path.join("build", "locale", lang,
80 | "LC_MESSAGES", "dockbarx-themes.mo")
81 | if os.path.exists(d_file):
82 | lang_files.append(d_file)
83 | if os.path.exists(dt_file):
84 | lang_files.append(dt_file)
85 | self.data_files.append( (lang_dir, lang_files) )
86 | # Scan folders for the right files
87 | self.scan_path("/usr/share/dockbarx/themes", "themes", ext=".tar.gz")
88 | self.scan_path("share/icons/", "icons", ext=".png")
89 | self.scan_path("/usr/share/namebar/themes",
90 | "dockx_applets/namebar_themes",
91 | ext=".tar.gz")
92 | self.scan_path("/usr/share/dockbarx/applets/vc-themes",
93 | "dockx_applets/vc-themes")
94 | _install_data.run(self)
95 |
96 | def scan_path(self, install_path, base_path, path="", ext=""):
97 | files = []
98 | for f in os.listdir(os.path.join(base_path, path)):
99 | fpath = os.path.join(base_path, path, f)
100 | if os.path.isdir(fpath):
101 | self.scan_path(install_path, base_path,
102 | os.path.join(path, f), ext)
103 | elif os.path.isfile(fpath) and fpath.endswith(ext):
104 | files.append(fpath)
105 | if files:
106 | self.data_files.append((os.path.join(install_path, path), files))
107 |
108 |
109 | cmdclass = {
110 | "build": build,
111 | "build_trans": build_trans,
112 | "install_data": install_data,
113 | }
114 |
115 | data_files=[
116 | ("/usr/share/dockbarx/applets", ["dockx_applets/cardapio_dbx.py",
117 | "dockx_applets/cardapio.applet",
118 | "dockx_applets/clock.py",
119 | "dockx_applets/clock.applet",
120 | "dockx_applets/namebar.py",
121 | "dockx_applets/namebar.applet",
122 | "dockx_applets/appindicator.py",
123 | "dockx_applets/appindicator.applet",
124 | "dockx_applets/hello_world.py",
125 | "dockx_applets/hello_world.applet",
126 | "dockx_applets/battery_status.py",
127 | "dockx_applets/battery_status.applet",
128 | "dockx_applets/volume-control.py",
129 | "dockx_applets/volume-control.applet",
130 | "dockx_applets/volume-control.ui",
131 | "dockx_applets/namebar_window_buttons.applet",
132 | "dockx_applets/namebar_window_buttons.py",
133 | "dockx_applets/namebar_window_title.applet",
134 | "dockx_applets/namebar_window_title.py"]),
135 | ("/usr/bin", ["dockbarx_factory", "dbx_preference", "dockx"]),
136 | ("/usr/lib/bonobo/servers", ["GNOME_DockBarXApplet.server"]),
137 | ("/usr/share/applications/", ["dbx_preference.desktop"]),
138 | ("/usr/share/applications/", ["DockX.desktop"]),
139 | ]
140 |
141 | setup(name="Dockbarx",
142 | version=VERSION,
143 | description="A dock-ish gnome-applet",
144 | author="Aleksey Shaferov and Matias Sars",
145 | url="http://launchpad.net/dockbar/",
146 | packages=["dockbarx"],
147 | data_files=data_files,
148 | cmdclass=cmdclass
149 | )
150 |
151 |
152 |
153 | if len(sys.argv) == 2 and sys.argv[1] == "install":
154 | if os.path.exists("/usr/bin/dockbarx.py"):
155 | # Remove old dockbarx.py so that it isn't imported
156 | # instead of the package dockbarx when dockbarx is run.
157 | print
158 | print "There is a dockbarx.py in /usr/bin. " + \
159 | "This has to be removed to make DockbarX run correctly."
160 | remove = raw_input("Remove /usr/bin/dockbarx.py? (Y/n)")
161 | if remove == "" or remove[0].lower() == "y":
162 | os.remove("/usr/bin/dockbarx.py")
163 | else:
164 | print "/usr/bin/dockbarx.py is not removed. " + \
165 | "Please remove it or rename it manually."
166 |
167 | if os.path.exists("/usr/bin/dockbarx_factory.py"):
168 | print
169 | print "There is a dockbarx_factory.py in /usr/bin. " + \
170 | "This file is no longer used."
171 | remove = raw_input("Remove /usr/bin/dockbarx_factory.py? (Y/n)")
172 | if remove == "" or remove[0].lower() == "y":
173 | os.remove("/usr/bin/dockbarx_factory.py")
174 | print "/usr/bin/dockbarx_factory.py is removed. "
175 | else:
176 | print "/usr/bin/dockbarx_factory.py is not removed. "
177 |
178 | if os.path.exists("/usr/bin/dbx_preference.py"):
179 | print
180 | print "There is a dbx_preference.py in /usr/bin. " + \
181 | "This file is no longer used."
182 | remove = raw_input("Remove /usr/bin/dbx_preference.py? (Y/n)")
183 | if remove == "" or remove[0].lower() == "y":
184 | os.remove("/usr/bin/dbx_preference.py")
185 | print "/usr/bin/dbx_preference.py is removed. "
186 | else:
187 | print "/usr/bin/dbx_preference.py is not removed. "
188 |
--------------------------------------------------------------------------------
/themes/Colors.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/Colors.tar.gz
--------------------------------------------------------------------------------
/themes/Deep.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/Deep.tar.gz
--------------------------------------------------------------------------------
/themes/Glass_DMD.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/Glass_DMD.tar.gz
--------------------------------------------------------------------------------
/themes/Magic_trans.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/Magic_trans.tar.gz
--------------------------------------------------------------------------------
/themes/dock/Colors.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dock/Colors.tar.gz
--------------------------------------------------------------------------------
/themes/dock/Glass_DMD.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dock/Glass_DMD.tar.gz
--------------------------------------------------------------------------------
/themes/dock/Magic_trans.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dock/Magic_trans.tar.gz
--------------------------------------------------------------------------------
/themes/dock/dbx.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dock/dbx.tar.gz
--------------------------------------------------------------------------------
/themes/dock/deep.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dock/deep.tar.gz
--------------------------------------------------------------------------------
/themes/dock/folded.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dock/folded.tar.gz
--------------------------------------------------------------------------------
/themes/dock/glass-dock.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dock/glass-dock.tar.gz
--------------------------------------------------------------------------------
/themes/dock/invisible.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dock/invisible.tar.gz
--------------------------------------------------------------------------------
/themes/dockxyz.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/dockxyz.tar.gz
--------------------------------------------------------------------------------
/themes/glassified.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/glassified.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/Colors.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/Colors.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/DMD_Glass.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/DMD_Glass.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/Elegance.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/Elegance.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/Magic_trans.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/Magic_trans.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/Radiance.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/Radiance.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/dbx.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/dbx.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/deep.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/deep.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/gradent.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/gradent.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/old.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/old.tar.gz
--------------------------------------------------------------------------------
/themes/popup_styles/square.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/popup_styles/square.tar.gz
--------------------------------------------------------------------------------
/themes/sunny-c.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/M7S/dockbarx/ca784021a555ea28cf51985e70e17ee95dd2f4eb/themes/sunny-c.tar.gz
--------------------------------------------------------------------------------
|