diff --git a/AWN/DockBarX/DockBarX.py b/AWN/DockBarX/DockBarX.py index 7272051..eb08350 100644 --- a/AWN/DockBarX/DockBarX.py +++ b/AWN/DockBarX/DockBarX.py @@ -60,10 +60,10 @@ def __on_idle(self): self.db = dockbarx.dockbar.DockBar(self) self.db.set_parent_window_reporting(True) self.db.load() - + # Inactive dockbarx's size overflow management self.db.set_max_size(3000) - + if self.get_pos_type() == gtk.POS_RIGHT: self.db.set_orient("right") self.alignment.set(1, 0, 0, 0) @@ -145,7 +145,7 @@ def add_window(self, window, reset_should_autohide=True): self.__calc_border_distance(window) if self.db_loaded and reset_should_autohide: self.__compute_should_autohide() - + def remove_window(self, window, reset_should_autohide=True, forced=False): if window in self.border_distances: del self.border_distances[window] @@ -171,7 +171,7 @@ def __update_autohide(self): def __on_window_state_changed(self, wnck_window,changed_mask, new_state): if WNCK_WINDOW_STATE_MINIMIZED & changed_mask: self.__compute_should_autohide() - + def __on_window_geometry_changed(self, window): if time.time() - self.geometry_time < 0.12 and \ window == self.last_geometry_window(): @@ -188,7 +188,7 @@ def __on_active_window_changed(self, screen, previous_active_window): def __on_behavior_changed(self, *args): self.__compute_should_autohide() - + def __calc_border_distance(self, window, reset_should_autohide=False): bd = {"left": 1000, "right": 1000, "top": 1000, "bottom": 1000} x, y, w, h = window.get_geometry() @@ -241,7 +241,7 @@ def get_monitor(self): if screen is None: screen = gtk.gdk.screen_get_default() return screen.get_monitor_at_window(self.window) - + def get_monitor_geometry(self): screen = self.get_screen() if screen is None: @@ -249,11 +249,26 @@ def get_monitor_geometry(self): monitor = screen.get_monitor_at_window(self.window) return screen.get_monitor_geometry(monitor) - def reload(): + def reload(self=None): self.db_loaded = False - self.db.reload() + self.db.reload(tell_parent=False) self.db_loaded = True + def readd_container(self, container): + # Dockbar calls back with this function when it is reloaded + # unless it's reloaded with tell_parent=True + if self.db.get_orient() in ("up", "down"): + container.set_size_request(-1, self.get_size() + \ + self.icon.get_offset() + 5) + else: + container.set_size_request(self.get_size() + \ + self.icon.get_offset() + 5, -1) + self.alignment.add(container) + container.show_all() + self.__compute_should_autohide() + + + class AWNappletDBus(dbus.service.Object): def __init__(self, applet): diff --git a/dockbarx/dockbar.py b/dockbarx/dockbar.py index 0433a0c..e47aeb1 100644 --- a/dockbarx/dockbar.py +++ b/dockbarx/dockbar.py @@ -549,7 +549,7 @@ def load(self): self.reload() - def reload(self, event=None, data=None): + def reload(self, event=None, data=None, tell_parent=True): """Reloads DockbarX.""" logger.info("DockbarX reload") # Clear away the old stuff, if any. @@ -635,6 +635,10 @@ def reload(self, event=None, data=None): self.__on_desktop_changed) self.__on_active_window_changed(self.screen, None) + # Since the old container is destroyed we need to tell + # parent to readd it. + if tell_parent: + self.parent.readd_container(self.get_container()) def set_orient(self, orient): diff --git a/dockx b/dockx index 917eb23..6abd418 100755 --- a/dockx +++ b/dockx @@ -1212,7 +1212,7 @@ class DockX(CairoDockX): def reload(self, *args): self.db_loaded = False - self.dockbar.reload() + self.dockbar.reload(tell_parent=False) self.db_loaded = True self.applets.find_applets() self.theme.reload()