# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: geoffrey.antos@gmail.com-20081019125221-\ # zil1593fpbmwnab7 # target_branch: http://bazaar.launchpad.net/%7Eawn-core/awn/trunk/ # testament_sha1: 185fadc17b962a71845c2f992ab6e9c0575adfd8 # timestamp: 2008-10-19 14:14:28 -0700 # base_revision_id: mhr3@zoznam.sk-20081016130204-eixk1coestavf3y7 # # Begin patch === modified file 'ChangeLog' --- ChangeLog 2008-10-16 13:02:04 +0000 +++ ChangeLog 2008-10-19 12:52:21 +0000 @@ -1,3 +1,117 @@ +2008-10-19 Geoffrey Antos + + * awn-manager/awnPreferences.py: + * awn-manager/window.glade: + UI for selecting which screen AWN should appear on. + +2008-10-19 Geoffrey Antos + + * src/awn-x.c: + Set struts relative to screen edge, not monitor edge per + wm-spec. This fixes maximized windows when 'panel_mode' + is true on monitors with a bottom edge higher than + the bottom edge of the screen. + +2008-10-19 Geoffrey Antos + * data/awn.schema-ini.in: + Updated schema for new monitor_num pref. + This combined with bar_pos replaces force_monitor, + monitor_width, and monitor_height and automatically + works on multi-monitor setups without making users + edit settings by hand. + + * libawn/awn-applet-dialog.c: + Don't position applet dialogs in a manner that causes them + to straddle two monitors. + + * src/awn-bar.c: + * src/awn-utils.c: + * src/awn-window.c: + * src/main.c: + Fix window placement on monitors with origins other than (0,0). + +2008-10-19 Geoffrey Antos + + * libawn/awn-settings.c: + * libawn/awn-settings.h: + * src/awn-monitor.c: + * src/awn-monitor.h: + * src/Makefile.am: + Store monitor geometry in one location, AwmSettings, + rather than three. AwmSettings now provides all the + functionality of AwmMonitor + + * libawn/awn-effects.c: + * src/awn-panel.c: + * src/awn-task-manager.c: + * src/main.c: + Use AwmSettings.monitor instead of AwmMonitor or + AvmSettings.monitor_width. + + Reduce flickering by not showing panel before children + are added. + + * bindings/vala/awn.gi: + * bindings/vala/awn.vapi: + Update Vala bindings with these changes + +2008-10-18 Geoffrey Antos + * doc/reference/libawn.types + * libawn/awn-settings.c: + * libawn/awn-settings.h: + * libawn/awn-effects.c: + * src/awn-x.c: + * src/main.c: + GObject-ify AwnSettings into a GObject-based singleton, add + to list of types in documentation. + + * doc/reference/Makefile.am: + Make deprecated functions appear deprecated in the docs + + * doc/reference/libawn-doc.sgml + * doc/reference/libawn-sections.txt: + * doc/reference/libawn.types: + Updated types and sections and master table of contents + from results of gtkdoc-scan + + * doc/reference/tmpl/awn-applet-dialog.sgml: + * doc/reference/tmpl/awn-applet-simple.sgml: + * doc/reference/tmpl/awn-applet.sgml: + * doc/reference/tmpl/awn-cairo-utils.sgml: + * doc/reference/tmpl/awn-config-client.sgml: + * doc/reference/tmpl/awn-defines.sgml: + * doc/reference/tmpl/awn-desktop-item.sgml: + * doc/reference/tmpl/awn-effects.sgml: + * doc/reference/tmpl/awn-plug.sgml: + * doc/reference/tmpl/awn-settings.sgml: + * doc/reference/tmpl/awn-title.sgml: + * doc/reference/tmpl/awn-vfs.sgml: + * doc/reference/tmpl/libawn-unused.sgml: + Remove automatically generated docs files + that contained no manually added content + from the tree. Keeping out-of-date + intermediate files in the tree is of no use to anybody. + + * src/awn-bar.c: + * src/awn-hotspot.c: + * src/awn-window.c: + Remove excess whitespace at end of file + +2008-10-18 Geoffrey Antos + * libawn/title.c: + * src/awn-bar.c: + * src/main.c: + Fixed building agains GTK with GTK_DISABLE_DEPRECATED defined. + + * src/main.c: + Use GTK+ functionality that's been around since 2.0 to set + the window hint to Dock rather than calling Xlib routines directly. + +2008-10-18 Geoffrey Antos + * autogen.sh: + Make autogen pass all commandline arguments to ./configure just + like every other autogen.sh out there. + 2008-10-16 Michal Hruby reviewed by: Rodney Cryderman === modified file 'autogen.sh' --- autogen.sh 2007-11-19 18:58:40 +0000 +++ autogen.sh 2008-10-19 05:17:55 +0000 @@ -14,7 +14,7 @@ } if which gnome-autogen.sh ; then - REQUIRED_AUTOMAKE_VERSION=1.9 . gnome-autogen.sh + REQUIRED_AUTOMAKE_VERSION=1.9 . gnome-autogen.sh $@ else if which intltoolize && which glib-gettextize && which gtkdocize && which autoreconf ; then intltoolize --copy --force --automake || \ @@ -26,7 +26,7 @@ gtkdocize --copy || \ (echo "There was an error in running gtkdocize." > /dev/stderr; exit 1) - autoreconf --force --install || \ + autoreconf --force --install $@ || \ (echo "There was an error in running autoreconf." > /dev/stderr; exit 1) else === modified file 'awn-manager/awnPreferences.py' --- awn-manager/awnPreferences.py 2008-08-30 00:36:07 +0000 +++ awn-manager/awnPreferences.py 2008-10-19 12:52:21 +0000 @@ -100,6 +100,7 @@ self.setup_font(defs.TITLE, defs.FONT_FACE, self.wTree.get_widget("selectfontface")) + self.setup_monitor(defs.AWN, defs.MONITOR_NUM, self.wTree.get_widget("monitor_num")) self.setup_spin(defs.BAR, defs.ICON_OFFSET, self.wTree.get_widget("bariconoffset")) self.setup_spin(defs.BAR, defs.BAR_HEIGHT, self.wTree.get_widget("barheight")) self.setup_spin(defs.BAR, defs.BAR_ANGLE, self.wTree.get_widget("barangle")) @@ -354,6 +355,28 @@ group, key = groupkey self.client.set_int(group, key, dropdown.get_active()) + def load_monitor(self, group, key, spin): + display = gtk.gdk.display_get_default() + screen = display.get_default_screen() + spin.set_range(min=float(1), max=float(screen.get_n_monitors()+1)) + try: + spin.set_value(float(self.client.get_int(group, key) + 1)) + except TypeError: + raise "\nKey: [%s]%s isn't set.\nRestarting AWN usually solves this issue\n" % (group, key) + + + def reload_monitor(self, entry, spin): + self.load_monitor(entry['group'], entry['key'], spin) + + def monitor_changed(self, spin, groupkey): + group, key = groupkey + self.client.set_int(group, key, int(spin.get_value()) - 1) + + def setup_monitor(self, group, key, spin): + self.load_monitor(group, key, spin) + spin.connect("value-changed", self.monitor_changed, (group, key)) + self.client.notify_add(group, key, self.reload_monitor, spin) + def setup_look(self, group, key, dropdown): dropdown.append_text(_("Flat bar")) dropdown.append_text(_("3D look")) === modified file 'awn-manager/window.glade' --- awn-manager/window.glade 2008-08-23 23:00:30 +0000 +++ awn-manager/window.glade 2008-10-19 12:52:21 +0000 @@ -1,6 +1,6 @@ - + GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK @@ -234,12 +234,12 @@ label_item - 1 False + 1 @@ -446,7 +446,7 @@ 0 Opening - + 1 2 @@ -467,10 +467,7 @@ True - 1 - 2 - @@ -478,12 +475,9 @@ True - 1 - 2 1 2 - @@ -491,12 +485,9 @@ True - 1 - 2 2 3 - @@ -504,12 +495,9 @@ True - 1 - 2 3 4 - @@ -517,14 +505,9 @@ True - 1 - 2 4 5 - - 6 - 1 @@ -785,7 +768,7 @@ True True - 1 0 100 1 10 10 + 1 0 100 1 10 0 1 True GTK_UPDATE_IF_VALID @@ -878,6 +861,50 @@ 8 8 + + True + 0 + GTK_SHADOW_NONE + + + True + + + True + 0 + Monitor Number: + PANGO_ELLIPSIZE_END + + + + + True + True + 1 1 1 1 1 0 + 1 + True + GTK_UPDATE_IF_VALID + + + False + 1 + + + + + + + True + <b>Location</b> + True + + + label_item + + + + + True 0 @@ -909,6 +936,7 @@ False False + 1 @@ -925,7 +953,7 @@ True True - 1 0 75 1 10 10 + 1 0 75 1 10 0 1 True GTK_UPDATE_IF_VALID @@ -938,7 +966,7 @@ False - 1 + 2 @@ -955,7 +983,7 @@ True True - 1 0 100 1 10 10 + 1 0 100 1 10 0 1 True GTK_UPDATE_IF_VALID @@ -969,7 +997,7 @@ False False - 2 + 3 @@ -986,7 +1014,7 @@ True True - 1 0 100 1 10 10 + 1 0 100 1 10 0 1 True GTK_UPDATE_IF_VALID @@ -998,7 +1026,7 @@ - 3 + 4 @@ -1038,6 +1066,82 @@ False + 1 + + + + + True + 0 + GTK_SHADOW_NONE + + + True + 4 + 12 + + + True + + + True + True + Show separator between launchers and tasks + True + 0 + True + + + False + False + + + + + True + + + True + 0 + Separator color: + + + + + True + True + 0 + True + + + False + False + 1 + + + + + 1 + + + + + + + + + True + <b>Separator</b> + True + + + label_item + + + + + False + 2 @@ -1128,82 +1232,7 @@ False - 1 - - - - - True - 0 - GTK_SHADOW_NONE - - - True - 4 - 12 - - - True - - - True - True - Show separator between launchers and tasks - True - 0 - True - - - False - False - - - - - True - - - True - 0 - Separator color: - - - - - True - True - 0 - True - - - False - False - 1 - - - - - 1 - - - - - - - - - True - <b>Separator</b> - True - - - label_item - - - - - False - 2 + 3 @@ -1497,7 +1526,7 @@ True True - 0 0 100 0 0 0 + 0 0 100 1 1 0 GTK_POS_RIGHT === modified file 'bindings/vala/awn.gi' --- bindings/vala/awn.gi 2008-08-31 23:57:31 +0000 +++ bindings/vala/awn.gi 2008-10-19 09:57:59 +0000 @@ -239,75 +239,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -709,7 +640,7 @@ - + @@ -799,8 +730,8 @@ + - @@ -891,8 +822,8 @@ + - @@ -909,8 +840,8 @@ + - @@ -1092,8 +1023,8 @@ + - @@ -1116,10 +1047,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - === modified file 'bindings/vala/awn.vapi' --- bindings/vala/awn.vapi 2008-08-31 23:57:31 +0000 +++ bindings/vala/awn.vapi 2008-10-19 09:57:59 +0000 @@ -143,75 +143,6 @@ public void* data; } [Compact] - [CCode (cheader_filename = "libawn/awn-settings.h")] - public class Settings { - public weak Gtk.IconTheme icon_theme; - public weak Gtk.Widget bar; - public weak Gtk.Widget window; - public weak Gtk.Widget title; - public weak Gtk.Widget appman; - public weak Gtk.Widget hot; - public int task_width; - public Gdk.Rectangle monitor; - public bool force_monitor; - public int monitor_height; - public int monitor_width; - public bool panel_mode; - public bool auto_hide; - public bool hidden; - public bool hiding; - public int auto_hide_delay; - public bool keep_below; - public int bar_height; - public int bar_angle; - public float bar_pos; - public bool no_bar_resize_ani; - public bool rounded_corners; - public float corner_radius; - public bool render_pattern; - public bool expand_bar; - public weak string pattern_uri; - public float pattern_alpha; - public weak Awn.Color g_step_1; - public weak Awn.Color g_step_2; - public weak Awn.Color g_histep_1; - public weak Awn.Color g_histep_2; - public weak Awn.Color border_color; - public weak Awn.Color hilight_color; - public bool show_separator; - public weak Awn.Color sep_color; - public bool show_all_windows; - public weak GLib.SList launchers; - public bool use_png; - public weak string active_png; - public weak Awn.Color arrow_color; - public int arrow_offset; - public bool tasks_have_arrows; - public bool name_change_notify; - public bool alpha_effect; - public int icon_effect; - public float icon_alpha; - public float reflection_alpha_mult; - public int frame_rate; - public bool icon_depth_on; - public int icon_offset; - public int reflection_offset; - public bool show_shadows; - public weak Awn.Color text_color; - public weak Awn.Color shadow_color; - public weak Awn.Color background; - public weak string font_face; - public bool btest; - public float ftest; - public weak string stest; - public weak Awn.Color ctest; - public weak GLib.SList ltest; - public int bar_width; - public float curviness; - public float curves_symmetry; - public Settings (); - } - [Compact] [CCode (cheader_filename = "libawn/awn-vfs.h")] public class VfsMonitor { public static weak Awn.VfsMonitor add (string path, Awn.VfsMonitorType monitor_type, Awn.VfsMonitorFunc callback); @@ -318,8 +249,12 @@ public void stop (Awn.Effect effect); public void unregister (); } + [Compact] + [CCode (cheader_filename = "awn.h")] + public class GnomeDesktopItem { + } [CCode (cheader_filename = "libawn/awn-applet.h")] - public class Applet : Gtk.EventBox, Atk.Implementor, Gtk.Buildable { + public class Applet : Gtk.EventBox, Gtk.Buildable, Atk.Implementor { public weak Gtk.Widget create_default_menu (); public static weak Gtk.Widget create_pref_item (); public uint get_height (); @@ -345,13 +280,13 @@ public virtual signal void orientation_changed (int p0); } [CCode (cheader_filename = "libawn/awn-applet-dialog.h")] - public class AppletDialog : Gtk.Window, Atk.Implementor, Gtk.Buildable { + public class AppletDialog : Gtk.Window, Gtk.Buildable, Atk.Implementor { [CCode (type = "GtkWidget*")] public AppletDialog (Awn.Applet applet); public void position_reset (); } [CCode (cheader_filename = "libawn/awn-applet-simple.h")] - public class AppletSimple : Awn.Applet, Atk.Implementor, Gtk.Buildable { + public class AppletSimple : Awn.Applet, Gtk.Buildable, Atk.Implementor { public void effects_off (); public void effects_on (); public weak Awn.Icons get_awn_icons (); @@ -382,14 +317,81 @@ public void set_icons_info (Gtk.Widget applet, string uid, int height, string[] states, string[] icon_names); } [CCode (cheader_filename = "libawn/awn-plug.h")] - public class Plug : Gtk.Plug, Atk.Implementor, Gtk.Buildable { + public class Plug : Gtk.Plug, Gtk.Buildable, Atk.Implementor { public void @construct (Gdk.NativeWindow socket_id); [CCode (type = "GtkWidget*")] public Plug (Awn.Applet applet); public virtual signal void applet_deleted (string uid); } + [CCode (cheader_filename = "libawn/awn-settings.h")] + public class Settings : GLib.Object { + public weak Gtk.IconTheme icon_theme; + public weak Gtk.Widget bar; + public weak Gtk.Widget window; + public weak Gtk.Widget title; + public weak Gtk.Widget appman; + public weak Gtk.Widget hot; + public int task_width; + public Gdk.Rectangle monitor; + public int monitor_num; + public bool panel_mode; + public bool auto_hide; + public bool hidden; + public bool hiding; + public int auto_hide_delay; + public bool keep_below; + public int bar_height; + public int bar_angle; + public float bar_pos; + public bool no_bar_resize_ani; + public bool rounded_corners; + public float corner_radius; + public bool render_pattern; + public bool expand_bar; + public weak string pattern_uri; + public float pattern_alpha; + public weak Awn.Color g_step_1; + public weak Awn.Color g_step_2; + public weak Awn.Color g_histep_1; + public weak Awn.Color g_histep_2; + public weak Awn.Color border_color; + public weak Awn.Color hilight_color; + public bool show_separator; + public weak Awn.Color sep_color; + public bool show_all_windows; + public weak GLib.SList launchers; + public bool use_png; + public weak string active_png; + public weak Awn.Color arrow_color; + public int arrow_offset; + public bool tasks_have_arrows; + public bool name_change_notify; + public bool alpha_effect; + public int icon_effect; + public float icon_alpha; + public float reflection_alpha_mult; + public int frame_rate; + public bool icon_depth_on; + public int icon_offset; + public int reflection_offset; + public bool show_shadows; + public weak Awn.Color text_color; + public weak Awn.Color shadow_color; + public weak Awn.Color background; + public weak string font_face; + public bool btest; + public float ftest; + public weak string stest; + public weak Awn.Color ctest; + public weak GLib.SList ltest; + public int bar_width; + public float curviness; + public float curves_symmetry; + public Settings (); + public virtual signal void geometry_changed (); + } [CCode (cheader_filename = "libawn/awn-title.h")] - public class Title : Gtk.Window, Atk.Implementor, Gtk.Buildable { + public class Title : Gtk.Window, Gtk.Buildable, Atk.Implementor { public static weak Gtk.Widget get_default (); public void hide (Gtk.Widget focus); public void show (Gtk.Widget focus, string text); === modified file 'data/awn.schema-ini.in' --- data/awn.schema-ini.in 2008-08-03 23:20:29 +0000 +++ data/awn.schema-ini.in 2008-10-19 10:08:35 +0000 @@ -1,23 +1,7 @@ -[DEFAULT/force_monitor] -type = bool -default = False -description = Don't use the monitor settings taken from GDK. -[DEFAULT/monitor_width] -type = int -default = 1024 -description = The width of the monitor that overrides the GDK monitor settings, if force_monitor is TRUE. -[DEFAULT/monitor_height] -type = int -default = 768 -description = The height of the monitor that overrides the GDK monitor settings, if force_monitor is TRUE. -[DEFAULT/monitor_xoffset] +[DEFAULT/monitor_num] type = int default = 0 -description = Allows the panel positioning to be offset by X, useful for dual monitor setups. If force_monitor is TRUE. -[DEFAULT/monitor_xalign] -type = float -default = 0.5 -description = Set the panel alignment. +description = The monitor the panel should be placed on. [DEFAULT/panel_mode] type = bool default = False === modified file 'doc/reference/Makefile.am' --- doc/reference/Makefile.am 2008-02-18 09:23:22 +0000 +++ doc/reference/Makefile.am 2008-10-19 08:14:30 +0000 @@ -27,7 +27,7 @@ # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" -SCAN_OPTIONS= +SCAN_OPTIONS=--deprecated-guards="AWN_DISABLE_DEPRECATED" # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--sgml-mode --output-format=xml @@ -50,6 +50,8 @@ # Header files to ignore when scanning. # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h IGNORE_HFILES= + eggchecksum.h \ + eggdesktopfile.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png === modified file 'doc/reference/libawn-docs.sgml' --- doc/reference/libawn-docs.sgml 2007-11-19 18:58:40 +0000 +++ doc/reference/libawn-docs.sgml 2008-10-19 08:14:30 +0000 @@ -1,25 +1,42 @@ - libawn Reference Manual + Table of Contents - - - - + + + + + + + + + + + + - + + + + + + - === modified file 'doc/reference/libawn-sections.txt' --- doc/reference/libawn-sections.txt 2007-11-19 18:58:40 +0000 +++ doc/reference/libawn-sections.txt 2008-10-19 08:14:30 +0000 @@ -1,10 +1,37 @@
+awn-icons +AwnIcons +AwnIcons +AwnIconsClass +awn_icons_new +awn_icons_get_icon_at_height +awn_icons_get_icon_simple_at_height +awn_icons_get_icon +awn_icons_get_icon_simple +awn_icons_set_height +awn_icons_set_icons_info +awn_icons_set_icon_info +awn_icons_override_gtk_theme +awn_icons_set_changed_cb + +AWN_ICONS +AWN_IS_ICONS +AWN_TYPE_ICONS +awn_icons_get_type +AWN_ICONS_CLASS +AWN_IS_ICONS_CLASS +AWN_ICONS_GET_CLASS +
+ +
awn-applet-dialog -AwnAppletDialogPrivate AwnAppletDialog AwnAppletDialog +AwnAppletDialogClass awn_applet_dialog_new awn_applet_dialog_position_reset + +AwnAppletDialogPrivate AWN_APPLET_DIALOG AWN_IS_APPLET_DIALOG @@ -16,14 +43,45 @@
+awn-plug +AwnPlug +AwnPlug +AwnPlugClass +awn_plug_new +awn_plug_construct + +AwnPlugPrivate + +AWN_PLUG +AWN_IS_PLUG +AWN_TYPE_PLUG +awn_plug_get_type +AWN_PLUG_CLASS +AWN_IS_PLUG_CLASS +AWN_PLUG_GET_CLASS +
+ +
awn-applet-simple -AwnAppletSimplePrivate AwnAppletSimple AwnAppletSimple +AwnAppletSimpleClass awn_applet_simple_new awn_applet_simple_set_icon +awn_applet_simple_set_icon_context +awn_applet_simple_set_icon_context_scaled +awn_applet_simple_set_awn_icon +awn_applet_simple_set_awn_icons +awn_applet_simple_set_awn_icon_state +awn_applet_simple_get_awn_icons awn_applet_simple_set_temp_icon awn_applet_simple_get_effects +awn_applet_simple_effects_on +awn_applet_simple_effects_off +awn_applet_simple_set_title +awn_applet_simple_set_title_visibility + +AwnAppletSimplePrivate AWN_APPLET_SIMPLE AWN_IS_APPLET_SIMPLE @@ -35,30 +93,15 @@
-awn-plug -AwnPlugPrivate -AwnPlug -AwnPlug -awn_plug_new -awn_plug_construct - -AWN_PLUG -AWN_IS_PLUG -AWN_TYPE_PLUG -awn_plug_get_type -AWN_PLUG_CLASS -AWN_IS_PLUG_CLASS -AWN_PLUG_GET_CLASS -
- -
awn-title -AwnTitlePrivate AwnTitle AwnTitle +AwnTitleClass awn_title_get_default awn_title_show awn_title_hide + +AwnTitlePrivate AWN_TITLE AWN_IS_TITLE @@ -70,16 +113,39 @@
+awn-settings +AwnSettings +AwnSettings +AwnSettingsClass +awn_settings_new +awn_get_settings + +AwnSettingsPrivate + +AWN_SETTINGS +AWN_IS_SETTINGS +AWN_TYPE_SETTINGS +awn_settings_get_type +AWN_SETTINGS_CLASS +AWN_IS_SETTINGS_CLASS +AWN_SETTINGS_GET_CLASS +
+ +
awn-applet -AwnAppletPrivate AwnApplet AwnApplet +AwnAppletClass AwnAppletInitFunc AwnAppletInitPFunc awn_applet_new awn_applet_get_orientation awn_applet_get_height +awn_applet_get_uid awn_applet_create_default_menu +awn_applet_create_pref_item + +AwnAppletPrivate AWN_APPLET AWN_IS_APPLET @@ -91,6 +157,77 @@
+awn-effects-shared +AwnEffectPriority +awn_effect_check_top_effect +awn_effect_handle_repeating +awn_effect_check_max_loops +awn_effects_main_effect_loop + +AwnEffectsPrivate +
+ +
+awn-effect-glow +glow_effect +glow_opening_effect +glow_closing_effect +glow_attention_effect +glow_effect_finalize +
+ +
+awn-effect-spotlight3d +spotlight3D_hover_effect +spotlight3D_opening_effect +spotlight3D_closing_effect +spotlight3D_effect_finalize +
+ +
+awn-cairo-utils +AwnCairoRoundCorners +awn_cairo_rounded_rect +awn_cairo_string_to_color +
+ +
+awn-defines +AWN_GCONF_PATH +AWN_APPLET_GCONF_PATH +AWN_MAX_HEIGHT +AWN_MIN_HEIGHT +AwnOrientation +
+ +
+awn-desktop-item +AwnDesktopItem +AWN_TYPE_DESKTOP_ITEM +AWN_DESKTOP_ITEM +awn_desktop_item_get_type +awn_desktop_item_new +awn_desktop_item_copy +awn_desktop_item_get_filename +awn_desktop_item_get_item_type +awn_desktop_item_set_item_type +awn_desktop_item_get_icon +awn_desktop_item_set_icon +awn_desktop_item_get_name +awn_desktop_item_set_name +awn_desktop_item_get_exec +awn_desktop_item_set_exec +awn_desktop_item_get_string +awn_desktop_item_set_string +awn_desktop_item_get_localestring +awn_desktop_item_set_localestring +awn_desktop_item_exists +awn_desktop_item_launch +awn_desktop_item_save +awn_desktop_item_free +
+ +
awn-vfs AwnVfsMonitor AwnVfsMonitorEvent @@ -104,29 +241,91 @@
-awn-settings -AwnSettings -awn_settings_new -awn_get_settings -awn_config_set_window_to_update +awn-effects-ops +awn_effect_op_scale_and_clip +awn_effect_op_3dturn +awn_effect_op_saturate +awn_effect_op_hflip +awn_effect_op_glow +awn_effect_op_todest +awn_effect_move_x +get_pixbuf_from_surface +
+ +
+stamp-awn-enum-types +
+ +
+awn-effect-desaturate +desaturate_effect +
+ +
+awn-enum-types +awn_orientation_get_type +AWN_TYPE_ORIENTATION +awn_cairo_round_corners_get_type +AWN_TYPE_CAIRO_ROUND_CORNERS +awn_config_value_type_get_type +AWN_TYPE_CONFIG_VALUE_TYPE +awn_config_list_type_get_type +AWN_TYPE_CONFIG_LIST_TYPE +awn_config_backend_get_type +AWN_TYPE_CONFIG_BACKEND +awn_effect_get_type +AWN_TYPE_EFFECT +awn_effect_sequence_get_type +AWN_TYPE_EFFECT_SEQUENCE +awn_vfs_monitor_event_get_type +AWN_TYPE_VFS_MONITOR_EVENT +awn_vfs_monitor_type_get_type +AWN_TYPE_VFS_MONITOR_TYPE +awn_effect_priority_get_type +AWN_TYPE_EFFECT_PRIORITY +
+ +
+awn-effect-spotlight +spotlight_effect +spotlight_half_fade_effect +spotlight_opening_effect2 +spotlight_closing_effect +spotlight_init +spotlight_effect_finalize +
+ +
+awn-effect-bounce +bounce_effect +bounce_opening_effect +bounce_effect_finalize
awn-config-client AwnConfigClient +AWN_TYPE_CONFIG_CLIENT AWN_CONFIG_CLIENT AwnConfigClientNotifyEntry AwnConfigClientNotifyFunc -AwnConfigClientNotifyData AWN_CONFIG_CLIENT_DEFAULT_GROUP AwnConfigValueType AwnConfigListType +AwnConfigBackend +awn_config_client_get_type awn_config_client_new awn_config_client_new_for_applet +awn_config_client_query_backend awn_config_client_clear awn_config_client_ensure_group awn_config_client_notify_add awn_config_client_entry_exists +awn_config_client_load_defaults_from_schema +awn_config_client_key_lock_open +awn_config_client_key_lock +awn_config_client_key_lock_close +awn_config_client_get_value_type awn_config_client_get_bool awn_config_client_set_bool awn_config_client_get_float @@ -137,41 +336,25 @@ awn_config_client_set_string awn_config_client_get_list awn_config_client_set_list -awn_config_client_unref -
- -
-awn-defines -AWN_GCONF_PATH -AWN_APPLET_GCONF_PATH -AWN_MAX_HEIGHT -AWN_MIN_HEIGHT -AwnOrientation -
- -
-awn-desktop-item -AwnDesktopItem -AWN_DESKTOP_ITEM -awn_desktop_item_new -awn_desktop_item_copy -awn_desktop_item_get_filename -awn_desktop_item_get_item_type -awn_desktop_item_set_item_type -awn_desktop_item_get_icon -awn_desktop_item_set_icon -awn_desktop_item_get_name -awn_desktop_item_set_name -awn_desktop_item_get_exec -awn_desktop_item_set_exec -awn_desktop_item_get_string -awn_desktop_item_set_string -awn_desktop_item_get_localestring -awn_desktop_item_set_localestring -awn_desktop_item_exists -awn_desktop_item_launch -awn_desktop_item_save -awn_desktop_item_unref +awn_config_client_free +
+ +
+awn-effect-squish +bounce_squish_closing_effect +bounce_squish_opening_effect +bounce_squish_attention_effect +bounce_squish_effect +bounce_squish_effect_finalize +
+ +
+awn-effect-zoom +zoom_effect +zoom_attention_effect +zoom_opening_effect +zoom_closing_effect +zoom_effect_finalize
@@ -181,25 +364,57 @@ AwnTitleCallback AwnEventNotify AwnEffects -awn_effects_init +AWN_TYPE_EFFECTS +AWN_EFFECTS +awn_effects_get_type +awn_effects_new +awn_effects_new_for_widget +awn_effects_free awn_effects_finalize -awn_register_effects -awn_unregister_effects -awn_effect_start -awn_effect_stop +awn_effects_register +awn_effects_unregister +awn_effects_start +awn_effects_stop awn_effects_set_title -awn_effect_start_ex -awn_draw_background -awn_draw_icons -awn_draw_foreground -awn_draw_set_window_size -awn_draw_set_icon_size -
- -
-awn-cairo-utils -AwnCairoRoundCorners -awn_cairo_rounded_rect -awn_cairo_string_to_color +awn_effects_start_ex +awn_effects_draw_background +awn_effects_draw_icons +awn_effects_draw_icons_cairo +awn_effects_draw_foreground +awn_effects_draw_set_window_size +awn_effects_draw_set_icon_size +awn_effects_reflection_off +awn_effects_reflection_on +awn_effects_set_offset_cut +awn_effects_main_effect_loop +
+ +
+awn-effect-fade +fade_out_effect +fading_effect +fading_effect_finalize +
+ +
+awn-effect-turn +turn_hover_effect +turn_opening_effect +turn_closing_effect +turn_effect_finalize +
+ +
+eggchecksum +GChecksumType +GChecksum +g_checksum_new +g_checksum_copy +g_checksum_free +g_checksum_update +g_checksum_get_string +g_checksum_get_digest +g_compute_checksum_for_data +g_compute_checksum_for_string
=== modified file 'doc/reference/libawn.types' --- doc/reference/libawn.types 2007-11-19 18:58:40 +0000 +++ doc/reference/libawn.types 2008-10-19 08:14:30 +0000 @@ -1,15 +1,20 @@ awn_applet_dialog_get_type +awn_applet_get_type awn_applet_simple_get_type -awn_plug_get_type +awn_cairo_round_corners_get_type +awn_config_backend_get_type awn_config_client_get_type -awn_orientation_get_type -awn_cairo_round_corners_get_type +awn_config_list_type_get_type awn_config_value_type_get_type -awn_config_list_type_get_type +awn_desktop_item_get_type awn_effect_get_type +awn_effect_priority_get_type awn_effect_sequence_get_type +awn_effects_get_type +awn_icons_get_type +awn_orientation_get_type +awn_plug_get_type +awn_settings_get_type +awn_title_get_type awn_vfs_monitor_event_get_type awn_vfs_monitor_type_get_type -awn_title_get_type -awn_desktop_item_get_type -awn_applet_get_type === removed directory 'doc/reference/tmpl' === removed file 'doc/reference/tmpl/awn-applet-dialog.sgml' --- doc/reference/tmpl/awn-applet-dialog.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-applet-dialog.sgml 1970-01-01 00:00:00 +0000 @@ -1,48 +0,0 @@ - -AwnAppletDialog - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@applet: -@Returns: - - - - - - - -@dialog: - - === removed file 'doc/reference/tmpl/awn-applet-simple.sgml' --- doc/reference/tmpl/awn-applet-simple.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-applet-simple.sgml 1970-01-01 00:00:00 +0000 @@ -1,69 +0,0 @@ - -AwnAppletSimple - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@uid: -@orient: -@height: -@Returns: - - - - - - - -@simple: -@pixbuf: - - - - - - - -@simple: -@pixbuf: - - - - - - - -@simple: -@Returns: - - === removed file 'doc/reference/tmpl/awn-applet.sgml' --- doc/reference/tmpl/awn-applet.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-applet.sgml 1970-01-01 00:00:00 +0000 @@ -1,128 +0,0 @@ - -AwnApplet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@awnapplet: the object which received the signal. -@arg1: - - - - - - -@awnapplet: the object which received the signal. -@arg1: - - - - - - -@awnapplet: the object which received the signal. -@arg1: - - - - - - - - - - - - - - - - - - - - - -@applet: -@Returns: - - - - - - - -@uid: -@orient: -@height: -@Returns: - - - - - - - -@uid: -@orient: -@height: -@Returns: - - - - - - - -@applet: -@Returns: - - - - - - - -@applet: -@Returns: - - - - - - - -@applet: -@Returns: - - === removed file 'doc/reference/tmpl/awn-cairo-utils.sgml' --- doc/reference/tmpl/awn-cairo-utils.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-cairo-utils.sgml 1970-01-01 00:00:00 +0000 @@ -1,58 +0,0 @@ - -awn-cairo-utils - - - - - - - - - - - - - - - - - - - - - - -@ROUND_NONE: -@ROUND_TOP_LEFT: -@ROUND_TOP_RIGHT: -@ROUND_BOTTOM_RIGHT: -@ROUND_BOTTOM_LEFT: -@ROUND_TOP: -@ROUND_BOTTOM: -@ROUND_LEFT: -@ROUND_RIGHT: -@ROUND_ALL: - - - - - - -@cr: -@x0: -@y0: -@width: -@height: -@radius: -@state: - - - - - - - -@string: -@color: - - === removed file 'doc/reference/tmpl/awn-config-client.sgml' --- doc/reference/tmpl/awn-config-client.sgml 2008-07-13 19:27:11 +0000 +++ doc/reference/tmpl/awn-config-client.sgml 1970-01-01 00:00:00 +0000 @@ -1,265 +0,0 @@ - -awn-config-client - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@obj: - - - - - - - -@client: -@group: -@key: -@value: - - - - - - -@entry: -@user_data: - - - - - - - - - - - - - - -@AWN_CONFIG_VALUE_TYPE_NULL: -@AWN_CONFIG_VALUE_TYPE_BOOL: -@AWN_CONFIG_VALUE_TYPE_FLOAT: -@AWN_CONFIG_VALUE_TYPE_INT: -@AWN_CONFIG_VALUE_TYPE_STRING: -@AWN_CONFIG_VALUE_TYPE_LIST_BOOL: -@AWN_CONFIG_VALUE_TYPE_LIST_FLOAT: -@AWN_CONFIG_VALUE_TYPE_LIST_INT: -@AWN_CONFIG_VALUE_TYPE_LIST_STRING: - - - - - - -@AWN_CONFIG_CLIENT_LIST_TYPE_BOOL: -@AWN_CONFIG_CLIENT_LIST_TYPE_FLOAT: -@AWN_CONFIG_CLIENT_LIST_TYPE_INT: -@AWN_CONFIG_CLIENT_LIST_TYPE_STRING: - - - - - - -@Returns: - - - - - - - -@name: -@uid: -@Returns: - - - - - - - -@client: -@err: - - - - - - - -@client: -@group: - - - - - - - -@client: -@group: -@key: -@callback: -@user_data: - - - - - - - -@client: -@group: -@key: -@Returns: - - - - - - - -@client: -@group: -@key: -@err: -@Returns: - - - - - - - -@client: -@group: -@key: -@value: -@err: - - - - - - - -@client: -@group: -@key: -@err: -@Returns: - - - - - - - -@client: -@group: -@key: -@value: -@err: - - - - - - - -@client: -@group: -@key: -@err: -@Returns: - - - - - - - -@client: -@group: -@key: -@value: -@err: - - - - - - - -@client: -@group: -@key: -@err: -@Returns: - - - - - - - -@client: -@group: -@key: -@value: -@err: - - - - - - - -@client: -@group: -@key: -@list_type: -@err: -@Returns: - - - - - - - -@client: -@group: -@key: -@list_type: -@value: -@err: - - === removed file 'doc/reference/tmpl/awn-defines.sgml' --- doc/reference/tmpl/awn-defines.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-defines.sgml 1970-01-01 00:00:00 +0000 @@ -1,57 +0,0 @@ - -awn-defines - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@AWN_ORIENTATION_BOTTOM: -@AWN_ORIENTATION_TOP: -@AWN_ORIENTATION_RIGHT: -@AWN_ORIENTATION_LEFT: - === removed file 'doc/reference/tmpl/awn-desktop-item.sgml' --- doc/reference/tmpl/awn-desktop-item.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-desktop-item.sgml 1970-01-01 00:00:00 +0000 @@ -1,204 +0,0 @@ - -awn-desktop-item - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@obj: - - - - - - - -@filename: -@Returns: - - - - - - - -@item: -@Returns: - - - - - - - -@item: -@Returns: - - - - - - - -@item: -@Returns: - - - - - - - -@item: -@item_type: - - - - - - - -@item: -@icon_theme: -@Returns: - - - - - - - -@item: -@icon: - - - - - - - -@item: -@Returns: - - - - - - - -@item: -@name: - - - - - - - -@item: -@Returns: - - - - - - - -@item: -@exec: - - - - - - - -@item: -@key: -@Returns: - - - - - - - -@item: -@key: -@value: - - - - - - - -@item: -@key: -@Returns: - - - - - - - -@item: -@key: -@locale: -@value: - - - - - - - -@item: -@Returns: - - - - - - - -@item: -@documents: -@err: -@Returns: - - - - - - - -@item: -@new_filename: -@err: - - === removed file 'doc/reference/tmpl/awn-effects.sgml' --- doc/reference/tmpl/awn-effects.sgml 2008-10-12 21:16:55 +0000 +++ doc/reference/tmpl/awn-effects.sgml 1970-01-01 00:00:00 +0000 @@ -1,140 +0,0 @@ - -awn-effects - - - - - - - - - - - - - - - - - - - - - - -@AWN_EFFECT_NONE: -@AWN_EFFECT_OPENING: -@AWN_EFFECT_LAUNCHING: -@AWN_EFFECT_HOVER: -@AWN_EFFECT_ATTENTION: -@AWN_EFFECT_CLOSING: -@AWN_EFFECT_DESATURATE: - - - - - - -@AWN_EFFECT_DIR_NONE: -@AWN_EFFECT_DIR_STOP: -@AWN_EFFECT_DIR_DOWN: -@AWN_EFFECT_DIR_UP: -@AWN_EFFECT_DIR_LEFT: -@AWN_EFFECT_DIR_RIGHT: -@AWN_EFFECT_SQUISH_DOWN: -@AWN_EFFECT_SQUISH_DOWN2: -@AWN_EFFECT_SQUISH_UP: -@AWN_EFFECT_SQUISH_UP2: -@AWN_EFFECT_TURN_1: -@AWN_EFFECT_TURN_2: -@AWN_EFFECT_TURN_3: -@AWN_EFFECT_TURN_4: -@AWN_EFFECT_SPOTLIGHT_ON: -@AWN_EFFECT_SPOTLIGHT_TREMBLE_UP: -@AWN_EFFECT_SPOTLIGHT_TREMBLE_DOWN: -@AWN_EFFECT_SPOTLIGHT_OFF: - - - - - - -@Param1: -@Returns: - - - - - - - -@Param1: - - - - - - - -@self: -@focus_window: -@settings: -@title: -@get_title: -@effect_queue: -@icon_width: -@icon_height: -@window_width: -@window_height: -@effect_lock: -@current_effect: -@direction: -@count: -@x_offset: -@y_offset: -@curve_offset: -@delta_width: -@delta_height: -@clip_region: -@rotate_degrees: -@alpha: -@spotlight_alpha: -@saturation: -@glow_amount: -@icon_depth: -@icon_depth_direction: -@hover: -@clip: -@flip: -@spotlight: -@do_reflections: -@do_offset_cut: -@enter_notify: -@leave_notify: -@timer_id: -@icon_ctx: -@reflect_ctx: -@op_list: -@pad1: -@pad2: -@pad3: -@pad4: - - - - - - -@fx: - - - - - - - -@fx: -@title: -@title_func: - - === removed file 'doc/reference/tmpl/awn-plug.sgml' --- doc/reference/tmpl/awn-plug.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-plug.sgml 1970-01-01 00:00:00 +0000 @@ -1,57 +0,0 @@ - -AwnPlug - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@awnplug: the object which received the signal. -@arg1: - - - - - - -@applet: -@Returns: - - - - - - - -@plug: -@socket_id: - - === removed file 'doc/reference/tmpl/awn-settings.sgml' --- doc/reference/tmpl/awn-settings.sgml 2008-08-08 03:42:26 +0000 +++ doc/reference/tmpl/awn-settings.sgml 1970-01-01 00:00:00 +0000 @@ -1,35 +0,0 @@ - -awn-settings - - - - - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - - -@Returns: - - === removed file 'doc/reference/tmpl/awn-title.sgml' --- doc/reference/tmpl/awn-title.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-title.sgml 1970-01-01 00:00:00 +0000 @@ -1,58 +0,0 @@ - -AwnTitle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@Returns: - - - - - - - -@title: -@focus: -@text: - - - - - - - -@title: -@focus: - - === removed file 'doc/reference/tmpl/awn-vfs.sgml' --- doc/reference/tmpl/awn-vfs.sgml 2008-04-24 06:56:12 +0000 +++ doc/reference/tmpl/awn-vfs.sgml 1970-01-01 00:00:00 +0000 @@ -1,101 +0,0 @@ - -awn-vfs - - - - - - - - - - - - - - - - - - - - - - - - - - - - -@AWN_VFS_MONITOR_EVENT_CHANGED: -@AWN_VFS_MONITOR_EVENT_CREATED: -@AWN_VFS_MONITOR_EVENT_DELETED: - - - - - - -@AWN_VFS_MONITOR_FILE: -@AWN_VFS_MONITOR_DIRECTORY: - - - - - - -@monitor: -@monitor_path: -@event_path: -@event: -@user_data: - - - - - - - -@path: -@monitor_type: -@callback: -@user_data: -@Returns: - - - - - - - -@monitor: -@path: -@event: - - - - - - - -@monitor: - - - - - - - - - - - - - - -@paths: -@err: -@Returns: - - === removed file 'doc/reference/tmpl/libawn-unused.sgml' --- doc/reference/tmpl/libawn-unused.sgml 2008-10-12 21:16:55 +0000 +++ doc/reference/tmpl/libawn-unused.sgml 1970-01-01 00:00:00 +0000 @@ -1,169 +0,0 @@ - - - - - -@icon_theme: -@bar: -@window: -@title: -@appman: -@hot: -@task_width: -@monitor: -@force_monitor: -@monitor_height: -@monitor_width: -@panel_mode: -@auto_hide: -@hidden: -@hiding: -@auto_hide_delay: -@keep_below: -@bar_height: -@bar_angle: -@bar_pos: -@no_bar_resize_ani: -@rounded_corners: -@corner_radius: -@render_pattern: -@expand_bar: -@pattern_uri: -@pattern_alpha: -@g_step_1: -@g_step_2: -@g_histep_1: -@g_histep_2: -@border_color: -@hilight_color: -@show_separator: -@sep_color: -@show_all_windows: -@launchers: -@use_png: -@active_png: -@arrow_color: -@arrow_offset: -@tasks_have_arrows: -@name_change_notify: -@alpha_effect: -@icon_effect: -@icon_alpha: -@reflection_alpha_mult: -@frame_rate: -@icon_depth_on: -@icon_offset: -@text_color: -@shadow_color: -@background: -@font_face: -@btest: -@ftest: -@stest: -@ctest: -@ltest: -@bar_width: -@curviness: -@curves_symmetry: - - - - - - -@window: - - - - - - -@Param1: -@Param2: - - - - - - -@Param1: -@Param2: - - - - - - -@Param1: -@Param2: -@Param3: -@Param4: - - - - - - -@Param1: -@Param2: -@Param3: - - - - - - -@Param1: -@Param2: -@Param3: - - - - - - -@fx: -@effect: - - - - - - -@fx: -@effect: -@start: -@stop: -@max_loops: - - - - - - -@fx: -@effect: - - - - - - -@obj: -@fx: - - - - - - -@obj: -@fx: - - - - - - -@fx: - === modified file 'libawn/awn-applet-dialog.c' --- libawn/awn-applet-dialog.c 2008-08-30 17:48:17 +0000 +++ libawn/awn-applet-dialog.c 2008-10-19 10:08:35 +0000 @@ -33,6 +33,7 @@ #include "awn-cairo-utils.h" #include "awn-config-client.h" #include "awn-defines.h" +#include "awn-settings.h" G_DEFINE_TYPE(AwnAppletDialog, awn_applet_dialog, GTK_TYPE_WINDOW) @@ -82,6 +83,7 @@ void awn_applet_dialog_position_reset(AwnAppletDialog *dialog) { + AwnSettings* settings = awn_settings_new(); gint ax, ay, aw, ah; gint x, y, w, h; @@ -96,14 +98,15 @@ x = ax - w / 2 + aw / 2; y = ay - h + dialog->priv->offset; - if (x < 0) - x = 2; + if (x < settings->monitor.x) + x = settings->monitor.x + 2; - if ((x + w) > gdk_screen_get_width(gdk_screen_get_default())) - x = gdk_screen_get_width(gdk_screen_get_default()) - w - 20; + if ((x + w) > (settings->monitor.x + settings->monitor.width)) + x = settings->monitor.x + settings->monitor.width - w - 20; gtk_window_move(GTK_WINDOW(dialog), x, y); + g_object_unref (settings); } static gboolean === modified file 'libawn/awn-effects.c' --- libawn/awn-effects.c 2008-08-30 22:34:10 +0000 +++ libawn/awn-effects.c 2008-10-19 09:57:59 +0000 @@ -215,7 +215,7 @@ { fx->self = widget; fx->focus_window = NULL; - fx->settings = awn_get_settings(); + fx->settings = awn_settings_new(); fx->title = NULL; fx->get_title = NULL; fx->effect_queue = NULL; @@ -315,6 +315,8 @@ fx->reflect_ctx=NULL; } + g_object_unref (fx->settings); + fx->self = NULL; } @@ -729,7 +731,7 @@ { int awn_bar_width = fx->settings->bar_width; double awn_curve_curviness = fx->settings->curviness; - int awn_monitor_width = fx->settings->monitor_width; + int awn_monitor_width = fx->settings->monitor.width; gint curvex = GTK_WIDGET(fx->self)->allocation.x; === modified file 'libawn/awn-settings.c' --- libawn/awn-settings.c 2008-08-03 23:20:29 +0000 +++ libawn/awn-settings.c 2008-10-19 09:57:59 +0000 @@ -19,16 +19,14 @@ * Author : Neil Jagdish Patel */ +#include "config.h" + #include #include "awn-settings.h" -#include "config.h" - #include "awn-config-client.h" -#define FORCE_MONITOR "force_monitor" /*bool*/ -#define MONITOR_WIDTH "monitor_width" /*int*/ -#define MONITOR_HEIGHT "monitor_height" /*int*/ +#define MONITOR_NUM "monitor_num" /*int*/ #define PANEL_MODE "panel_mode" /*bool*/ #define AUTO_HIDE "auto_hide" /*bool*/ #define AUTO_HIDE_DELAY "auto_hide_delay" /*int*/ @@ -85,9 +83,18 @@ #define BACKGROUND "background" /*color*/ #define FONT_FACE "font_face" /*string*/ +G_DEFINE_TYPE (AwnSettings, awn_settings, G_TYPE_OBJECT) + +#define AWN_SETTINGS_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE (obj, \ + AWN_TYPE_SETTINGS, AwnSettingsPrivate)) + +struct _AwnSettingsPrivate +{ + AwnConfigClient *client; +}; + /* globals */ -static AwnSettings *settings = NULL; -static AwnConfigClient *client = NULL; +static AwnSettings *settings_singleton = NULL; /* prototypes */ static void awn_load_bool(AwnConfigClient *client, const gchar *group, @@ -98,6 +105,8 @@ const gchar* key, gfloat *data, gfloat def); static void awn_load_int(AwnConfigClient *client, const gchar *group, const gchar* key, gint *data, gint def); +static void awn_load_int_no_notify(AwnConfigClient *client, const gchar *group, + const gchar* key, gint *data, gint def); static void awn_load_color(AwnConfigClient *client, const gchar *group, const gchar* key, AwnColor *color, const gchar * def); static void awn_load_string_list(AwnConfigClient *client, const gchar *group, @@ -111,21 +120,108 @@ static void hex2float(gchar* HexColor, gfloat* FloatColor); +static void on_screen_monitors_changed (GdkScreen *screen, AwnSettings *settings); +static void on_screen_size_changed (GdkScreen *screen, AwnSettings *settings); +static void on_monitor_num_changed (AwnConfigClientNotifyEntry *entry, AwnSettings *settings); +static void update_monitor (AwnSettings *settings); + +enum +{ + GEOMETRY_CHANGED, + + LAST_SIGNAL +}; +static guint _settings_signals[LAST_SIGNAL] = { 0 }; + + +#ifndef AWN_DISABLE_DEPRECATED AwnSettings* awn_get_settings(void) { - //assert(settings != NULL); - if (settings) return settings; - else return awn_settings_new(); + return awn_settings_new(); } +#endif AwnSettings* awn_settings_new() { - GdkScreen *screen; + return AWN_SETTINGS(g_object_new(AWN_TYPE_SETTINGS, NULL)); +} + +static GObject* +awn_settings_constructor (GType type, + guint n_construct_params, + GObjectConstructParam *construct_params) +{ + GObject *object; + if (!settings_singleton) { + object = G_OBJECT_CLASS(awn_settings_parent_class)->constructor (type, + n_construct_params, + construct_params); + settings_singleton = AWN_SETTINGS (object); + } + else + object = g_object_ref (G_OBJECT (settings_singleton)); + + return object; +} + +static void +awn_settings_finalize (GObject *object) +{ + AwnSettings *settings; + AwnSettingsPrivate *priv; + + g_return_if_fail (AWN_IS_SETTINGS(object)); + + settings_singleton = NULL; + g_warning ("Finalizing Settings object..."); + + settings = AWN_SETTINGS (object); + priv = AWN_SETTINGS_GET_PRIVATE (settings); + + /* If AwnConfigClient were really a GObject ref-counted singleton, + * we should unref it here: + g_object_unref (priv->client); + */ + + G_OBJECT_CLASS (awn_settings_parent_class)->finalize (object); + +} + +static void +awn_settings_class_init (AwnSettingsClass *klass) +{ + GObjectClass *obj_class = G_OBJECT_CLASS (klass); + + obj_class->constructor = awn_settings_constructor; + obj_class->finalize = awn_settings_finalize; + + /* Add signals to the class */ + _settings_signals[GEOMETRY_CHANGED] = + g_signal_new ("geometry-changed", + G_OBJECT_CLASS_TYPE (obj_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (AwnSettingsClass, geometry_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + g_type_class_add_private (obj_class, sizeof (AwnSettingsPrivate)); +} + +static void +awn_settings_init (AwnSettings *s) +{ + AwnSettingsPrivate *priv; + AwnConfigClient *client; + GdkScreen *screen = gdk_screen_get_default (); gint width = 1024; gint height = 768; - screen = gdk_screen_get_default(); + + priv = AWN_SETTINGS_GET_PRIVATE (s); + + client = priv->client = awn_config_client_new(); if (screen) { @@ -133,28 +229,11 @@ height = gdk_screen_get_height(screen); } - if (settings) - return settings; - - AwnSettings *s = NULL; - - s = g_new(AwnSettings, 1); - - settings = s; - - client = awn_config_client_new(); - s->icon_theme = gtk_icon_theme_get_default(); /* general settings */ awn_config_client_ensure_group(client, AWN_CONFIG_CLIENT_DEFAULT_GROUP); - awn_load_bool(client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, FORCE_MONITOR, &s->force_monitor, FALSE); - - awn_load_int(client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, MONITOR_WIDTH, &s->monitor_width, width); - - awn_load_int(client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, MONITOR_HEIGHT, &s->monitor_height, height); - awn_load_bool(client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, PANEL_MODE, &s->panel_mode, FALSE); awn_load_bool(client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, AUTO_HIDE, &s->auto_hide, FALSE); @@ -163,6 +242,15 @@ awn_load_bool(client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, KEEP_BELOW, &s->keep_below, FALSE); + /* Monitor settings */ + awn_load_int_no_notify(client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, MONITOR_NUM, &s->monitor_num, 0); + update_monitor(s); + + awn_config_client_notify_add (client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, + MONITOR_NUM, + (AwnConfigClientNotifyFunc)on_monitor_num_changed, + s); + s->hidden = FALSE; /* Bar settings */ @@ -259,7 +347,7 @@ awn_load_string(client, TITLE, FONT_FACE, &s->font_face, "Sans 11"); - s->task_width = settings->bar_height + 12; + s->task_width = s->bar_height + 12; /* make the custom icons directory */ gchar *path = g_build_filename(g_get_home_dir(), @@ -270,7 +358,11 @@ g_free(path); - return s; + /* Hook up to the relevent the gdk-screen signals */ + g_signal_connect (screen, "monitors-changed", + G_CALLBACK (on_screen_monitors_changed), s); + g_signal_connect (screen, "size-changed", + G_CALLBACK (on_screen_size_changed), s); } static void @@ -370,7 +462,7 @@ } static void -awn_load_int(AwnConfigClient *client, const gchar *group, const gchar* key, gint *data, gint def) +awn_load_int_no_notify(AwnConfigClient *client, const gchar *group, const gchar* key, gint *data, gint def) { if (awn_config_client_entry_exists(client, group, key)) { @@ -382,7 +474,12 @@ awn_config_client_set_int(client, group, key, def, NULL); *data = def; } - +} + +static void +awn_load_int(AwnConfigClient *client, const gchar *group, const gchar* key, gint *data, gint def) +{ + awn_load_int_no_notify(client, group, key, data, def); awn_config_client_notify_add(client, group, key, (AwnConfigClientNotifyFunc)awn_notify_int, data); } @@ -457,4 +554,41 @@ } +static void +update_monitor (AwnSettings *settings) +{ + GdkScreen *screen = gdk_screen_get_default (); + + settings->monitor_num = CLAMP (settings->monitor_num, + 0, + gdk_screen_get_n_monitors (screen) - 1); + + gdk_screen_get_monitor_geometry (screen, settings->monitor_num, &settings->monitor); + + g_signal_emit (settings, _settings_signals[GEOMETRY_CHANGED], 0); +} + +/* Callbacks */ + +static void +on_screen_monitors_changed (GdkScreen *screen, AwnSettings *settings) +{ + update_monitor (settings); +} + +static void +on_screen_size_changed (GdkScreen *screen, AwnSettings *settings) +{ + update_monitor (settings); +} + +static void +on_monitor_num_changed (AwnConfigClientNotifyEntry *entry, AwnSettings *settings) +{ + g_return_if_fail (AWN_IS_SETTINGS (settings)); + + settings->monitor_num = entry->value.int_val; + + update_monitor (settings); +} === modified file 'libawn/awn-settings.h' --- libawn/awn-settings.h 2008-08-03 23:20:29 +0000 +++ libawn/awn-settings.h 2008-10-19 09:57:59 +0000 @@ -29,8 +29,33 @@ #include -typedef struct +G_BEGIN_DECLS + +#define AWN_TYPE_SETTINGS (awn_settings_get_type()) + +#define AWN_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AWN_TYPE_SETTINGS, \ + AwnSettings)) + +#define AWN_SETTINGS_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), AWN_SETTINGS, \ + AwnSettingsClass)) + +#define AWN_IS_SETTINGS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AWN_TYPE_SETTINGS)) + +#define AWN_IS_SETTINGS_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), \ + AWN_TYPE_SETTINGS)) + +#define AWN_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ + AWN_TYPE_SETTINGS, AwnSettingsClass)) + +typedef struct _AwnSettings AwnSettings; +typedef struct _AwnSettingsClass AwnSettingsClass; +typedef struct _AwnSettingsPrivate AwnSettingsPrivate; + +struct _AwnSettings { + GObject __parent; + + /*< public >*/ /* Misc globals */ GtkIconTheme *icon_theme; @@ -43,9 +68,7 @@ /* monitor settings */ GdkRectangle monitor; - gboolean force_monitor; - int monitor_height; - int monitor_width; + gint monitor_num; gboolean panel_mode; gboolean auto_hide; @@ -119,12 +142,23 @@ gfloat curviness; gfloat curves_symmetry; -} AwnSettings; - +}; + +struct _AwnSettingsClass { + GObjectClass parent_class; + + /*< private >*/ + + /*< signals >*/ + void (*geometry_changed) (AwnSettings *settings); +}; + +GType awn_settings_get_type(void) G_GNUC_CONST; AwnSettings* awn_settings_new(void); -/* returns singleton */ +#ifndef AWN_DISABLE_DEPRECATED AwnSettings* awn_get_settings(void); +#endif #endif /* _AWN_SETTINGS_H */ === modified file 'libawn/awn-title.c' --- libawn/awn-title.c 2008-08-08 23:37:34 +0000 +++ libawn/awn-title.c 2008-10-19 06:00:22 +0000 @@ -362,7 +362,7 @@ gtk_label_set_ellipsize(GTK_LABEL(priv->label), PANGO_ELLIPSIZE_NONE); gtk_box_pack_end(GTK_BOX(hbox), priv->label, TRUE, TRUE, 4); - gtk_window_set_policy(GTK_WINDOW(title), FALSE, FALSE, TRUE); + gtk_window_set_resizable(GTK_WINDOW(title), FALSE); g_signal_connect(title, "leave-notify-event", G_CALLBACK(on_prox_out), (gpointer)title); === modified file 'src/Makefile.am' --- src/Makefile.am 2008-08-23 23:00:30 +0000 +++ src/Makefile.am 2008-10-19 09:57:59 +0000 @@ -93,8 +93,6 @@ awn-app.c \ awn-app.h \ awn-defines.h \ - awn-monitor.c \ - awn-monitor.h \ awn-panel.c \ awn-panel.h \ $(NULL) === modified file 'src/awn-bar.c' --- src/awn-bar.c 2008-10-16 13:02:04 +0000 +++ src/awn-bar.c 2008-10-19 10:08:35 +0000 @@ -24,7 +24,7 @@ #include "config.h" #include "awn-bar.h" - +#include "awn-settings.h" #include "awn-x.h" #include @@ -79,7 +79,7 @@ widget_class = GTK_WIDGET_CLASS(this_class); - parent_class = gtk_type_class(gtk_widget_get_type()); + parent_class = g_type_class_peek_parent(this_class); g_type_class_add_private(g_obj_class, sizeof(AwnBarPrivate)); } @@ -820,15 +820,16 @@ static void _position_window(GtkWidget *window) { + AwnSettings* settings = awn_settings_new(); int ww, wh; int x, y; gtk_window_get_size(GTK_WINDOW(window), &ww, &wh); - y = settings->monitor.height - ((settings->bar_height + 2) * 2 - + settings->icon_offset); - //x = (int) ( (settings->monitor.width - ww)/2); - x = 0; + y = settings->monitor.y + settings->monitor.height - + ((settings->bar_height + 2) * 2 + settings->icon_offset); + //x = settings->monitor.x + (int) ( (settings->monitor.width - ww)/2); + x = settings->monitor.x; if ((settings->monitor.width) != ww && settings->monitor.width > 0) { @@ -951,10 +952,3 @@ gtk_widget_queue_draw(GTK_WIDGET(bar)); } - - - - - - - === modified file 'src/awn-hotspot.c' --- src/awn-hotspot.c 2008-07-05 18:07:16 +0000 +++ src/awn-hotspot.c 2008-10-19 08:14:30 +0000 @@ -277,17 +277,3 @@ gtk_window_move(GTK_WINDOW(window), x, y); } - - - - - - - - - - - - - - === removed file 'src/awn-monitor.c' --- src/awn-monitor.c 2008-04-12 06:42:08 +0000 +++ src/awn-monitor.c 1970-01-01 00:00:00 +0000 @@ -1,330 +0,0 @@ -/* - * Copyright (C) 2007 Neil Jagdish Patel - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Author : Neil Jagdish Patel - * - * Notes : Thanks to MacSlow (macslow.thepimp.net) for the transparent & shaped - * monitor code. -*/ - -#include "config.h" - -#include -#include - -#include -#include - -#include "awn-monitor.h" -#include "awn-x.h" - -G_DEFINE_TYPE (AwnMonitor, awn_monitor, G_TYPE_OBJECT) - -#define AWN_MONITOR_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE (obj, \ - AWN_TYPE_MONITOR, AwnMonitorPrivate)) - -#define FORCE_MONITOR "force_monitor" -#define MONITOR_WIDTH "monitor_width" -#define MONITOR_HEIGHT "monitor_height" -#define MONITOR_XOFFSET "monitor_xoffset" -#define MONITOR_XALIGN "monitor_xalign" - -struct _AwnMonitorPrivate -{ - AwnConfigClient *client; - - /* Monitor Geometry stuff */ - gboolean force_monitor; - - gint forced_width; - gint forced_height; - gint forced_xoffset; -}; - -enum -{ - PROP_0, - - PROP_CLIENT, -}; - -enum -{ - GEOMETRY_CHANGED, - - LAST_SIGNAL -}; -static guint _monitor_signals[LAST_SIGNAL] = { 0 }; - -/* Main function that keeps things in check */ -static void -update (AwnMonitor *monitor) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_MONITOR (monitor)); - priv = monitor->priv; - - if (priv->force_monitor) - { - monitor->width = priv->forced_width; - monitor->height = priv->forced_height; - monitor->xoffset = priv->forced_xoffset; - } - else - { - GdkScreen *screen = gdk_screen_get_default (); - monitor->width = gdk_screen_get_width (screen); - monitor->height = gdk_screen_get_height (screen); - monitor->xoffset = 0; - } - - g_debug ("Monitor changed: width=%d height=%d xoffset=%d xalign=%f\n", - monitor->width, monitor->height, monitor->xoffset, monitor->xalign); - - g_signal_emit (monitor, _monitor_signals[GEOMETRY_CHANGED], 0); -} - -/* Callbacks */ -static void -on_screen_size_changed (GdkScreen *screen, AwnMonitor *monitor) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_IS_MONITOR (monitor)); - priv = monitor->priv; - - if (priv->force_monitor) - return; - - update (monitor); -} - -static void -on_force_changed (AwnConfigClientNotifyEntry *entry, AwnMonitor *monitor) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_IS_MONITOR (monitor)); - priv = monitor->priv; - - priv->force_monitor = entry->value.bool_val; - - update (monitor); -} - -static void -on_width_changed (AwnConfigClientNotifyEntry *entry, AwnMonitor *monitor) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_IS_MONITOR (monitor)); - priv = monitor->priv; - - priv->forced_width = entry->value.int_val; - - update (monitor); -} - -static void -on_height_changed (AwnConfigClientNotifyEntry *entry, AwnMonitor *monitor) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_IS_MONITOR (monitor)); - priv = monitor->priv; - - priv->forced_height = entry->value.int_val; - - update (monitor); -} - -static void -on_xoffset_changed (AwnConfigClientNotifyEntry *entry, AwnMonitor *monitor) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_IS_MONITOR (monitor)); - priv = monitor->priv; - - priv->forced_xoffset = entry->value.int_val; - - update (monitor); -} - -static void -on_xalign_changed (AwnConfigClientNotifyEntry *entry, AwnMonitor *monitor) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_IS_MONITOR (monitor)); - priv = monitor->priv; - - monitor->xalign = entry->value.int_val; - - g_signal_emit (monitor, _monitor_signals[GEOMETRY_CHANGED], 0); -} - -static void -awn_monitor_set_client (AwnMonitor *monitor, AwnConfigClient *client) -{ - AwnMonitorPrivate *priv; - GdkScreen *screen = gdk_screen_get_default (); - - g_return_if_fail (AWN_IS_MONITOR (monitor)); - g_return_if_fail (client); - priv = monitor->priv; - - awn_config_client_ensure_group (client, AWN_CONFIG_CLIENT_DEFAULT_GROUP); - - /* Lets grab the initial values */ - priv->force_monitor = awn_config_client_get_bool (client, - AWN_CONFIG_CLIENT_DEFAULT_GROUP, - FORCE_MONITOR, NULL); - priv->forced_width = awn_config_client_get_int (client, - AWN_CONFIG_CLIENT_DEFAULT_GROUP, - MONITOR_WIDTH, NULL); - priv->forced_height = awn_config_client_get_int (client, - AWN_CONFIG_CLIENT_DEFAULT_GROUP, - MONITOR_HEIGHT, NULL); - priv->forced_xoffset = awn_config_client_get_int (client, - AWN_CONFIG_CLIENT_DEFAULT_GROUP, - MONITOR_XOFFSET, NULL); - monitor->xalign = awn_config_client_get_float (client, - AWN_CONFIG_CLIENT_DEFAULT_GROUP, - MONITOR_XALIGN, NULL); - /* - * Hook up to the relevent config-change signals, and the gdk-screen - * signals - */ - g_signal_connect (screen, "size-changed", - G_CALLBACK (on_screen_size_changed), monitor); - awn_config_client_notify_add (client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, - FORCE_MONITOR, - (AwnConfigClientNotifyFunc)on_force_changed, - monitor); - awn_config_client_notify_add (client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, - MONITOR_WIDTH, - (AwnConfigClientNotifyFunc)on_width_changed, - monitor); - awn_config_client_notify_add (client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, - MONITOR_HEIGHT, - (AwnConfigClientNotifyFunc)on_height_changed, - monitor); - awn_config_client_notify_add (client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, - MONITOR_XOFFSET, - (AwnConfigClientNotifyFunc)on_xoffset_changed, - monitor); - awn_config_client_notify_add (client, AWN_CONFIG_CLIENT_DEFAULT_GROUP, - MONITOR_XALIGN, - (AwnConfigClientNotifyFunc)on_xalign_changed, - monitor); - - update (monitor); -} - -/* GObject stuff */ -static void -awn_monitor_get_property (GObject *object, - guint prop_id, - GValue *value, - GParamSpec *pspec) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_IS_MONITOR (object)); - priv = AWN_MONITOR (object)->priv; - - switch (prop_id) - { - case PROP_CLIENT: - g_value_set_pointer (value, priv->client); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -awn_monitor_set_property (GObject *object, - guint prop_id, - const GValue *value, - GParamSpec *pspec) -{ - AwnMonitorPrivate *priv; - - g_return_if_fail (AWN_IS_MONITOR (object)); - priv = AWN_MONITOR (object)->priv; - - switch (prop_id) - { - case PROP_CLIENT: - awn_monitor_set_client (AWN_MONITOR (object), - g_value_get_pointer (value)); - break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - } -} - -static void -awn_monitor_class_init (AwnMonitorClass *klass) -{ - GObjectClass *obj_class = G_OBJECT_CLASS (klass); - - obj_class->get_property = awn_monitor_get_property; - obj_class->set_property = awn_monitor_set_property; - - /* Add properties to the class */ - g_object_class_install_property (obj_class, - PROP_CLIENT, - g_param_spec_pointer ("client", - "Client", - "AwnConfigClient", - G_PARAM_READWRITE)); - - /* Add signals to the class */ - _monitor_signals[GEOMETRY_CHANGED] = - g_signal_new ("geometry-changed", - G_OBJECT_CLASS_TYPE (obj_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (AwnMonitorClass, geometry_changed), - NULL, NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, 0); - - g_type_class_add_private (obj_class, sizeof (AwnMonitorPrivate)); -} - -static void -awn_monitor_init (AwnMonitor *monitor) -{ - AwnMonitorPrivate *priv; - - priv = monitor->priv = AWN_MONITOR_GET_PRIVATE (monitor); -} - -AwnMonitor * -awn_monitor_new_from_config (AwnConfigClient *client) -{ - AwnMonitor *monitor = g_object_new (AWN_TYPE_MONITOR, - "client", client, - NULL); - return monitor; -} -/* vim: set et ts=2 sts=2 sw=2 : */ - === removed file 'src/awn-monitor.h' --- src/awn-monitor.h 2008-03-29 18:38:40 +0000 +++ src/awn-monitor.h 1970-01-01 00:00:00 +0000 @@ -1,79 +0,0 @@ -/* - * Copyright (C) 2007 Neil Jagdish Patel - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Author : Neil Jagdish Patel -*/ - -#ifndef _AWN_MONITOR_H -#define _AWN_MONITOR_H - -#include -#include - -#include - -G_BEGIN_DECLS - -#define AWN_TYPE_MONITOR (awn_monitor_get_type()) - -#define AWN_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), AWN_TYPE_MONITOR, \ - AwnMonitor)) - -#define AWN_MONITOR_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), AWN_MONITOR, \ - AwnMonitorClass)) - -#define AWN_IS_MONITOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), AWN_TYPE_MONITOR)) - -#define AWN_IS_MONITOR_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), \ - AWN_TYPE_MONITOR)) - -#define AWN_MONITOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), \ - AWN_TYPE_MONITOR, AwnMonitorClass)) - -typedef struct _AwnMonitor AwnMonitor; -typedef struct _AwnMonitorClass AwnMonitorClass; -typedef struct _AwnMonitorPrivate AwnMonitorPrivate; - -struct _AwnMonitor { - GObject parent; - - gint width; - gint height; - gint xoffset; - gfloat xalign; - - /*< private >*/ - AwnMonitorPrivate *priv; -}; - -struct _AwnMonitorClass { - GObjectClass parent_class; - - /*< signals >*/ - void (*geometry_changed) (AwnMonitor *monitor); -}; - -GType awn_monitor_get_type(void) G_GNUC_CONST; - - -AwnMonitor * awn_monitor_new_from_config (AwnConfigClient *client); - -G_END_DECLS - - -#endif /* _AWN_MONITOR_H */ - === modified file 'src/awn-panel.c' --- src/awn-panel.c 2008-07-05 18:07:16 +0000 +++ src/awn-panel.c 2008-10-19 09:57:59 +0000 @@ -31,7 +31,6 @@ #include "awn-panel.h" #include "awn-applet-manager.h" -#include "awn-monitor.h" #if 0 #include "awn-background.h" @@ -46,7 +45,6 @@ struct _AwnPanelPrivate { AwnConfigClient *client; - AwnMonitor *monitor; GdkScreen *screen; @@ -287,8 +285,6 @@ priv->client = client; - priv->monitor = awn_monitor_new_from_config (client); - /* Start off by figuring out if we are composited or not*/ /* FIXME: Add overriding by gconf */ screen = gtk_widget_get_screen (GTK_WIDGET (panel)); @@ -301,13 +297,6 @@ G_CALLBACK (on_window_configure), panel); on_window_screen_changed (NULL, NULL, panel); - /* - * Setup the monitor class - * priv->monitor = awn_monitor_new (client); - * g_signal_connect (priv->monitor, "size-changed", - * G_CALLBACK (on_monitor_changed), panel - */ - /* Create the main AwnBackground object, listen to changes in from the * client */ === modified file 'src/awn-task-manager.c' --- src/awn-task-manager.c 2008-02-14 17:14:00 +0000 +++ src/awn-task-manager.c 2008-10-19 09:57:59 +0000 @@ -811,18 +811,18 @@ return; } - if (w + 20 > settings->monitor_width) { + if (w + 20 > settings->monitor.width) { x = w - num * width; do { --width; - } while (x + num * width + 40 > settings->monitor_width); - } else if (width != settings->bar_height + 12 && w + 60 < settings->monitor_width) { + } while (x + num * width + 40 > settings->monitor.width); + } else if (width != settings->bar_height + 12 && w + 60 < settings->monitor.width) { x = w - num * width; do { ++width; - } while (x + num * width + 50 < settings->monitor_width); + } while (x + num * width + 50 < settings->monitor.width); } if (width < settings->task_width) { === modified file 'src/awn-utils.c' --- src/awn-utils.c 2007-09-06 09:32:21 +0000 +++ src/awn-utils.c 2008-10-19 10:08:35 +0000 @@ -58,10 +58,10 @@ gint x, y; gtk_window_get_position (GTK_WINDOW (settings->bar), &x, &y); - gtk_window_move (GTK_WINDOW (settings->bar), x, settings->monitor.height - ((settings->bar_height +2)*2) - settings->icon_offset + current_y); + gtk_window_move (GTK_WINDOW (settings->bar), x, settings->monitor.y + settings->monitor.height - ((settings->bar_height +2)*2) - settings->icon_offset + current_y); gtk_window_get_position (GTK_WINDOW (settings->window), &x, &y); - gtk_window_move (GTK_WINDOW (settings->window), x, settings->monitor.height - ((settings->bar_height)*2) - settings->icon_offset + current_y); + gtk_window_move (GTK_WINDOW (settings->window), x, settings->monitor.y + settings->monitor.height - ((settings->bar_height)*2) - settings->icon_offset + current_y); return TRUE; === modified file 'src/awn-window.c' --- src/awn-window.c 2008-07-05 18:07:16 +0000 +++ src/awn-window.c 2008-10-19 10:08:35 +0000 @@ -336,15 +336,16 @@ gint ww, wh; gtk_window_get_size(GTK_WINDOW(window), &ww, &wh); - x_pos = (int) ((settings->monitor.width - ww) * settings->bar_pos); + x_pos = settings->monitor.x + + (int) ((settings->monitor.width - ww) * CLAMP(settings->bar_pos, 0, 1)); if (settings->hidden && !settings->keep_below) - y_pos = (int)settings->monitor.height; + y_pos = settings->monitor.y + settings->monitor.height; else //if(settings->bar_angle == 0) - y_pos = (int) (settings->monitor.height-wh); + y_pos = settings->monitor.y + settings->monitor.height-wh; //else - //y_pos = (int) (settings->monitor.height-wh*9/8+2); + //y_pos = settings->monitor.y + (int) (settings->monitor.height-wh*9/8+2); if (stop_position || settings->no_bar_resize_ani) { current_pos = x_pos; @@ -358,19 +359,3 @@ //gtk_window_move(GTK_WINDOW(window), x, y); } - - - - - - - - - - - - - - - - === modified file 'src/awn-x.c' --- src/awn-x.c 2008-06-25 15:09:05 +0000 +++ src/awn-x.c 2008-10-19 10:33:49 +0000 @@ -76,7 +76,6 @@ return icon_scaled; } -int num = 0; void awn_x_set_strut (GtkWindow * window) { @@ -84,19 +83,26 @@ int y = 0; int width = 0; int height = 0; + GdkScreen *screen; AwnSettings *settings = awn_settings_new (); + gint monitor_bottom; gtk_window_get_size (window, &width, &height); gtk_window_get_position (window, &x, &y); + if (GTK_WIDGET_REALIZED (GTK_WIDGET (window))) + screen = gtk_widget_get_screen (GTK_WIDGET (window)); + else + screen = gdk_screen_get_default (); + + monitor_bottom = settings->monitor.y + settings->monitor.height; + xutils_set_strut ((GTK_WIDGET (window)->window), + gdk_screen_get_height (screen) - monitor_bottom + (height - settings->icon_offset) / 2 + settings->icon_offset, x, x + width); - num++; - if (num == 20) - { - num = 0; - } + + g_object_unref (settings); } GString * === modified file 'src/main.c' --- src/main.c 2008-10-13 20:41:04 +0000 +++ src/main.c 2008-10-19 10:08:35 +0000 @@ -36,10 +36,6 @@ #include #include -#include - -#include -#include #include "awn-bar.h" #include "awn-window.h" @@ -91,35 +87,6 @@ composited_changed(GdkScreen *screen, AwnSettings *s); -static Atom -panel_atom_get(const char *atom_name) -{ - static GHashTable *atom_hash; - Display *xdisplay; - Atom retval; - - g_return_val_if_fail(atom_name != NULL, None); - - xdisplay = GDK_DISPLAY_XDISPLAY(gdk_display_get_default()); - - if (!atom_hash) - atom_hash = g_hash_table_new_full( - g_str_hash, g_str_equal, g_free, NULL); - - retval = GPOINTER_TO_UINT(g_hash_table_lookup(atom_hash, atom_name)); - - if (!retval) - { - retval = XInternAtom(xdisplay, atom_name, FALSE); - - if (retval != None) - g_hash_table_insert(atom_hash, g_strdup(atom_name), - GUINT_TO_POINTER(retval)); - } - - return retval; -} - static gboolean _window_state_change(GtkWidget *widget, GdkEventWindowState *event, gpointer user_data) { @@ -219,7 +186,9 @@ settings->window = awn_window_new(settings); - gtk_window_set_policy(GTK_WINDOW(settings->window), FALSE, FALSE, TRUE); + gtk_window_set_type_hint(GTK_WINDOW(settings->window), GDK_WINDOW_TYPE_HINT_DOCK); + + gtk_window_set_resizable(GTK_WINDOW(settings->window), FALSE); gtk_widget_add_events(GTK_WIDGET(settings->window), GDK_ALL_EVENTS_MASK); @@ -244,47 +213,9 @@ gtk_window_set_transient_for(GTK_WINDOW(settings->window), GTK_WINDOW(settings->bar)); - gtk_widget_show_all(settings->bar); - - gtk_widget_show_all(settings->window); - - Atom atoms [2] = { None, None }; - - atoms [0] = panel_atom_get("_NET_WM_WINDOW_TYPE_DOCK"); - - XChangeProperty(GDK_WINDOW_XDISPLAY( - GTK_WIDGET(settings->window)->window), - GDK_WINDOW_XWINDOW(GTK_WIDGET(settings->window)->window), - panel_atom_get("_NET_WM_WINDOW_TYPE"), - XA_ATOM, 32, PropModeReplace, - (unsigned char *) atoms, - 1); - - screen = gtk_widget_get_screen(GTK_WIDGET(settings->window)); - - if (screen && !settings->force_monitor) - { - gdk_screen_get_monitor_geometry(screen, - gdk_screen_get_monitor_at_window(screen, GTK_WIDGET(settings->window)->window), - &settings->monitor); - - //settings->monitor_width = gdk_screen_get_width(screen); - //settings->monitor_height = gdk_screen_get_height(screen); - settings->monitor_width = settings->monitor.width; - settings->monitor_height = settings->monitor.height; - g_signal_connect(G_OBJECT(screen), "size-changed", G_CALLBACK(screen_size_changed), (gpointer)settings); - } - else - { - settings->monitor.width = settings->monitor_width; - settings->monitor.height = settings->monitor_height; - } - settings->hot = awn_hotspot_new(settings); - gtk_widget_show(settings->hot); - gtk_window_present(GTK_WINDOW(settings->window)); - + screen = gdk_screen_get_default(); g_signal_connect(G_OBJECT(screen), "composited-changed", G_CALLBACK(composited_changed), (gpointer)settings); g_signal_connect(G_OBJECT(settings->window), "drag-motion", @@ -352,6 +283,8 @@ gtk_main(); + g_object_unref (settings); + return 0; } @@ -502,6 +435,8 @@ awn_applet_manager_quit(AWN_APPLET_MANAGER(s->appman)); gtk_main_quit(); + + g_object_unref (s); } static GtkWidget * @@ -557,22 +492,26 @@ resize(AwnSettings *settings) { gint ww, wh; + GdkRectangle *monitor = &settings->monitor; settings->task_width = settings->bar_height + 12; awn_applet_manager_height_changed(AWN_APPLET_MANAGER(settings->appman)); gtk_window_get_size(GTK_WINDOW(settings->window), &ww, &wh); - gtk_widget_set_size_request(settings->window, -1, (settings->bar_height)*2 + settings->icon_offset); + wh = (settings->bar_height)*2 + settings->icon_offset; + gtk_widget_set_size_request(settings->window, -1, wh); gtk_window_move(GTK_WINDOW(settings->window), - (settings->monitor.width - ww)*settings->bar_pos, - settings->monitor.height - ((settings->bar_height)*2 + settings->icon_offset)); + monitor->x + (gint)((monitor->width - ww)*settings->bar_pos), + monitor->y + monitor->height - wh); + + wh = ((settings->bar_height + 2) *2 + settings->icon_offset); gtk_window_resize(GTK_WINDOW(settings->bar), - settings->monitor.width, - ((settings->bar_height + 2) *2 + settings->icon_offset)); + monitor->width, + wh); gtk_window_move(GTK_WINDOW(settings->bar), - 0, - settings->monitor.height - ((settings->bar_height + 2) * 2 + settings->icon_offset)); + monitor->x, + monitor->y + monitor->height - wh); } static void @@ -610,15 +549,6 @@ gtk_widget_queue_draw(GTK_WIDGET(settings->appman)); } -static void -screen_size_changed(GdkScreen *screen, AwnSettings *s) -{ - g_print("Screen size changed\n"); - gdk_screen_get_monitor_geometry(screen, - gdk_screen_get_monitor_at_window(screen, GTK_WIDGET(s->window)->window), - &s->monitor); -} - static gboolean is_composited(GdkScreen *screen) { gchar *soutput = NULL, *serror = NULL; @@ -719,10 +649,12 @@ awn_window_force_repos(); // set the x position right, without movement. awn_applet_manager_load_applets(AWN_APPLET_MANAGER(s->appman)); started = TRUE; + + gtk_widget_show_all(s->bar); + gtk_widget_show_all(s->window); } gtk_widget_show(s->bar); - gtk_widget_show(s->window); gtk_widget_show(s->hot); } # Begin bundle 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