[pan2] - fix for dbus crashes - implemented hotkey UI, todo: replace keys dynamically



commit 985dac14daa1f6871372d89bc99ab0bede71f849
Author: Heinrich MÃller <henmull src gnome org>
Date:   Fri Jan 20 18:32:12 2012 +0100

    - fix for dbus crashes
    - implemented hotkey UI, todo: replace keys dynamically

 pan.cbp                    |  871 ++++++++++++--------------------------------
 pan.png                    |  Bin 3897 -> 4041 bytes
 pan/data-impl/Makefile.am  |    4 +-
 pan/data-impl/data-impl.cc |    1 -
 pan/data-impl/data-impl.h  |   11 -
 pan/data-impl/hotkeys.cc   |  123 -------
 pan/data/article-cache.cc  |    2 -
 pan/data/data.h            |   12 -
 pan/gui/Makefile.am        |    3 +-
 pan/gui/actions.cc         |   59 +---
 pan/gui/actions.h          |    2 -
 pan/gui/gui.cc             |   19 +-
 pan/gui/hotkeys.cc         |   56 +++
 pan/gui/pan.cc             |   30 +-
 pan/gui/prefs-ui.cc        |  200 ++++++++++
 pan/gui/prefs.cc           |   27 ++
 pan/gui/prefs.h            |   12 +
 17 files changed, 559 insertions(+), 873 deletions(-)
---
diff --git a/pan.cbp b/pan.cbp
index 7a104e1..f280e71 100644
--- a/pan.cbp
+++ b/pan.cbp
@@ -61,696 +61,285 @@
 		<Unit filename="config.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/data-impl/add-server.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/article-filter.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/article-filter.h">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/data-impl/add-server.cc" />
+		<Unit filename="pan/data-impl/article-filter.cc" />
+		<Unit filename="pan/data-impl/article-filter.h" />
 		<Unit filename="pan/data-impl/cert-store.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/data-impl/data-impl.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/data-impl.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/data-io.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/data-io.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/defgroup.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/groups.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/headers-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/headers.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/memchunk.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/my-tree.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/profiles.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/profiles.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/rules-filter.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/rules-filter.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/server.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/speed-test-load-group.cc">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/data-impl/data-impl.cc" />
+		<Unit filename="pan/data-impl/data-impl.h" />
+		<Unit filename="pan/data-impl/data-io.cc" />
+		<Unit filename="pan/data-impl/data-io.h" />
+		<Unit filename="pan/data-impl/defgroup.h" />
+		<Unit filename="pan/data-impl/groups.cc" />
+		<Unit filename="pan/data-impl/headers-test.cc" />
+		<Unit filename="pan/data-impl/headers.cc" />
+		<Unit filename="pan/data-impl/memchunk.h" />
+		<Unit filename="pan/data-impl/my-tree.cc" />
+		<Unit filename="pan/data-impl/profiles.cc" />
+		<Unit filename="pan/data-impl/profiles.h" />
+		<Unit filename="pan/data-impl/rules-filter.cc" />
+		<Unit filename="pan/data-impl/rules-filter.h" />
+		<Unit filename="pan/data-impl/server.cc" />
+		<Unit filename="pan/data-impl/speed-test-load-group.cc" />
 		<Unit filename="pan/data-impl/sql-db.cc">
 			<Option target="all_linux" />
 		</Unit>
 		<Unit filename="pan/data-impl/sql-db.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/data-impl/task-archive.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data-impl/xover.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/article-cache.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/article-cache.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/article-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/article.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/article.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/cert-store.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/cert-store.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/data.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/data.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/defgroup.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/encode-cache.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/encode-cache.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/parts.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/parts.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/server-info.h">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/data-impl/task-archive.cc" />
+		<Unit filename="pan/data-impl/xover.cc" />
+		<Unit filename="pan/data/article-cache.cc" />
+		<Unit filename="pan/data/article-cache.h" />
+		<Unit filename="pan/data/article-test.cc" />
+		<Unit filename="pan/data/article.cc" />
+		<Unit filename="pan/data/article.h" />
+		<Unit filename="pan/data/cert-store.cc" />
+		<Unit filename="pan/data/cert-store.h" />
+		<Unit filename="pan/data/data.cc" />
+		<Unit filename="pan/data/data.h" />
+		<Unit filename="pan/data/defgroup.h" />
+		<Unit filename="pan/data/encode-cache.cc" />
+		<Unit filename="pan/data/encode-cache.h" />
+		<Unit filename="pan/data/parts.cc" />
+		<Unit filename="pan/data/parts.h" />
+		<Unit filename="pan/data/server-info.h" />
 		<Unit filename="pan/data/xover-cache.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/data/xref-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/xref.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/data/xref.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/debug.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/debug.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/defgroup.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/e-util.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/e-util.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/file-util.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/file-util.h">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/data/xref-test.cc" />
+		<Unit filename="pan/data/xref.cc" />
+		<Unit filename="pan/data/xref.h" />
+		<Unit filename="pan/general/debug.cc" />
+		<Unit filename="pan/general/debug.h" />
+		<Unit filename="pan/general/defgroup.h" />
+		<Unit filename="pan/general/e-util.cc" />
+		<Unit filename="pan/general/e-util.h" />
+		<Unit filename="pan/general/file-util.cc" />
+		<Unit filename="pan/general/file-util.h" />
 		<Unit filename="pan/general/gdk-threads.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/general/line-reader.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/line-reader.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/locking.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/log.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/log.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/macros.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/map-vector.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/messages.h">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/general/line-reader.cc" />
+		<Unit filename="pan/general/line-reader.h" />
+		<Unit filename="pan/general/locking.h" />
+		<Unit filename="pan/general/log.cc" />
+		<Unit filename="pan/general/log.h" />
+		<Unit filename="pan/general/macros.h" />
+		<Unit filename="pan/general/map-vector.h" />
+		<Unit filename="pan/general/messages.h" />
 		<Unit filename="pan/general/non-gui.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/general/progress-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/progress.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/progress.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/quark-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/quark.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/quark.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/sorted-vector.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/string-view-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/string-view.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/string-view.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/test.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/text-match-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/text-match.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/text-match.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/time-elapsed.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/utf8-utils.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/utf8-utils.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/worker-pool.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/general/worker-pool.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/action-manager.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/actions.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/actions.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/body-pane.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/body-pane.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/defgroup.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/dl-headers-ui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/dl-headers-ui.h">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/general/progress-test.cc" />
+		<Unit filename="pan/general/progress.cc" />
+		<Unit filename="pan/general/progress.h" />
+		<Unit filename="pan/general/quark-test.cc" />
+		<Unit filename="pan/general/quark.cc" />
+		<Unit filename="pan/general/quark.h" />
+		<Unit filename="pan/general/sorted-vector.h" />
+		<Unit filename="pan/general/string-view-test.cc" />
+		<Unit filename="pan/general/string-view.cc" />
+		<Unit filename="pan/general/string-view.h" />
+		<Unit filename="pan/general/test.h" />
+		<Unit filename="pan/general/text-match-test.cc" />
+		<Unit filename="pan/general/text-match.cc" />
+		<Unit filename="pan/general/text-match.h" />
+		<Unit filename="pan/general/time-elapsed.h" />
+		<Unit filename="pan/general/utf8-utils.cc" />
+		<Unit filename="pan/general/utf8-utils.h" />
+		<Unit filename="pan/general/worker-pool.cc" />
+		<Unit filename="pan/general/worker-pool.h" />
+		<Unit filename="pan/gui/action-manager.h" />
+		<Unit filename="pan/gui/actions.cc" />
+		<Unit filename="pan/gui/actions.h" />
+		<Unit filename="pan/gui/body-pane.cc" />
+		<Unit filename="pan/gui/body-pane.h" />
+		<Unit filename="pan/gui/defgroup.h" />
+		<Unit filename="pan/gui/dl-headers-ui.cc" />
+		<Unit filename="pan/gui/dl-headers-ui.h" />
 		<Unit filename="pan/gui/e-action-combo-box.c">
 			<Option compilerVar="CC" />
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/e-action-combo-box.h">
-			<Option target="all_linux" />
 		</Unit>
+		<Unit filename="pan/gui/e-action-combo-box.h" />
 		<Unit filename="pan/gui/e-charset-combo-box.c">
 			<Option compilerVar="CC" />
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/e-charset-combo-box.h">
-			<Option target="all_linux" />
 		</Unit>
+		<Unit filename="pan/gui/e-charset-combo-box.h" />
 		<Unit filename="pan/gui/e-charset-dialog.c">
 			<Option compilerVar="CC" />
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/e-charset-dialog.h">
-			<Option target="all_linux" />
 		</Unit>
+		<Unit filename="pan/gui/e-charset-dialog.h" />
 		<Unit filename="pan/gui/e-charset.c">
 			<Option compilerVar="CC" />
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/e-charset.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/group-pane.cc">
-			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/gui/group-pane.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/group-prefs-dialog.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/group-prefs-dialog.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/group-prefs.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/group-prefs.h">
-			<Option target="all_linux" />
+		<Unit filename="pan/gui/e-charset.h" />
+		<Unit filename="pan/gui/e-cte-dialog.c">
+			<Option compilerVar="CC" />
 		</Unit>
+		<Unit filename="pan/gui/e-cte-dialog.h" />
+		<Unit filename="pan/gui/group-pane.cc" />
+		<Unit filename="pan/gui/group-pane.h" />
+		<Unit filename="pan/gui/group-prefs-dialog.cc" />
+		<Unit filename="pan/gui/group-prefs-dialog.h" />
+		<Unit filename="pan/gui/group-prefs.cc" />
+		<Unit filename="pan/gui/group-prefs.h" />
+		<Unit filename="pan/gui/gtk-compat.h" />
 		<Unit filename="pan/gui/gtk_compat.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/gui/gui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/gui.h">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/gui/gui.cc" />
+		<Unit filename="pan/gui/gui.h" />
 		<Unit filename="pan/gui/header-pane-factory.cc">
 			<Option target="all_linux" />
 		</Unit>
 		<Unit filename="pan/gui/header-pane-factory.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/gui/header-pane.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/header-pane.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/hig.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/hig.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/license.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/log-ui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/log-ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/pad.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/pan-file-entry.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/pan-file-entry.h">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/gui/header-pane.cc" />
+		<Unit filename="pan/gui/header-pane.h" />
+		<Unit filename="pan/gui/hig.cc" />
+		<Unit filename="pan/gui/hig.h" />
+		<Unit filename="pan/gui/hotkeys.cc" />
+		<Unit filename="pan/gui/license.h" />
+		<Unit filename="pan/gui/log-ui.cc" />
+		<Unit filename="pan/gui/log-ui.h" />
+		<Unit filename="pan/gui/pad.h" />
+		<Unit filename="pan/gui/pan-file-entry.cc" />
+		<Unit filename="pan/gui/pan-file-entry.h" />
 		<Unit filename="pan/gui/pan-pixbufs.c">
 			<Option compilerVar="CC" />
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/pan-tree.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/pan-tree.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/pan-ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/pan.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/pan.ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/panrc.rc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/post-ui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/post-ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/post.ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/prefs-file.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/prefs-file.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/prefs-ui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/prefs-ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/prefs.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/prefs.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/profiles-dialog.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/profiles-dialog.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/progress-view.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/progress-view.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/render-bytes.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/render-bytes.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/save-ui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/save-ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/score-add-ui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/score-add-ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/score-view-ui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/score-view-ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/server-ui.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/server-ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/tango-colors.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/task-pane.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/task-pane.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/taskpane.ui.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/url.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/url.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/wait.h">
-			<Option target="all_linux" />
 		</Unit>
+		<Unit filename="pan/gui/pan-tree.cc" />
+		<Unit filename="pan/gui/pan-tree.h" />
+		<Unit filename="pan/gui/pan-ui.h" />
+		<Unit filename="pan/gui/pan.cc" />
+		<Unit filename="pan/gui/pan.ui.h" />
+		<Unit filename="pan/gui/pan.ui.ssl.h" />
+		<Unit filename="pan/gui/panrc.rc" />
+		<Unit filename="pan/gui/post-ui.cc" />
+		<Unit filename="pan/gui/post-ui.h" />
+		<Unit filename="pan/gui/post.ui.h" />
+		<Unit filename="pan/gui/post.ui.pgp.h" />
+		<Unit filename="pan/gui/prefs-file.cc" />
+		<Unit filename="pan/gui/prefs-file.h" />
+		<Unit filename="pan/gui/prefs-ui.cc" />
+		<Unit filename="pan/gui/prefs-ui.h" />
+		<Unit filename="pan/gui/prefs.cc" />
+		<Unit filename="pan/gui/prefs.h" />
+		<Unit filename="pan/gui/profiles-dialog.cc" />
+		<Unit filename="pan/gui/profiles-dialog.h" />
+		<Unit filename="pan/gui/progress-view.cc" />
+		<Unit filename="pan/gui/progress-view.h" />
+		<Unit filename="pan/gui/render-bytes.cc" />
+		<Unit filename="pan/gui/render-bytes.h" />
+		<Unit filename="pan/gui/save-attach-ui.cc" />
+		<Unit filename="pan/gui/save-attach-ui.h" />
+		<Unit filename="pan/gui/save-ui.cc" />
+		<Unit filename="pan/gui/save-ui.h" />
+		<Unit filename="pan/gui/score-add-ui.cc" />
+		<Unit filename="pan/gui/score-add-ui.h" />
+		<Unit filename="pan/gui/score-view-ui.cc" />
+		<Unit filename="pan/gui/score-view-ui.h" />
+		<Unit filename="pan/gui/server-ui.cc" />
+		<Unit filename="pan/gui/server-ui.h" />
+		<Unit filename="pan/gui/tango-colors.h" />
+		<Unit filename="pan/gui/task-pane.cc" />
+		<Unit filename="pan/gui/task-pane.h" />
+		<Unit filename="pan/gui/taskpane.ui.h" />
+		<Unit filename="pan/gui/url.cc" />
+		<Unit filename="pan/gui/url.h" />
+		<Unit filename="pan/gui/wait.h" />
 		<Unit filename="pan/gui/xface.c">
 			<Option compilerVar="CC" />
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/gui/xface.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/icons/pan-pixbufs-internal.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/icons/pan-pixbufs.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/adaptable-set-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/adaptable-set.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/adaptable-set.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/decoder.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/decoder.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/defgroup.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/encoder.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/encoder.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/health.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/nntp-pool.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/nntp-pool.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/nntp.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/nntp.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/nzb-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/nzb.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/nzb.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/queue.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/queue.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket-impl-gio.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket-impl-gio.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket-impl-main.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket-impl-main.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket-impl-openssl.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket-impl-openssl.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket-impl-scripted.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket-impl-scripted.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/socket.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-article.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-article.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-groups.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-groups.h">
-			<Option target="all_linux" />
 		</Unit>
+		<Unit filename="pan/gui/xface.h" />
+		<Unit filename="pan/icons/pan-pixbufs-internal.h" />
+		<Unit filename="pan/icons/pan-pixbufs.h" />
+		<Unit filename="pan/icons/pan_icons/pan-pixbufs-internal.h" />
+		<Unit filename="pan/icons/pan_icons/pan-pixbufs.h" />
+		<Unit filename="pan/tasks/adaptable-set-test.cc" />
+		<Unit filename="pan/tasks/adaptable-set.cc" />
+		<Unit filename="pan/tasks/adaptable-set.h" />
+		<Unit filename="pan/tasks/decoder.cc" />
+		<Unit filename="pan/tasks/decoder.h" />
+		<Unit filename="pan/tasks/defgroup.h" />
+		<Unit filename="pan/tasks/encoder.cc" />
+		<Unit filename="pan/tasks/encoder.h" />
+		<Unit filename="pan/tasks/health.h" />
+		<Unit filename="pan/tasks/nntp-pool.cc" />
+		<Unit filename="pan/tasks/nntp-pool.h" />
+		<Unit filename="pan/tasks/nntp.cc" />
+		<Unit filename="pan/tasks/nntp.h" />
+		<Unit filename="pan/tasks/nzb-test.cc" />
+		<Unit filename="pan/tasks/nzb.cc" />
+		<Unit filename="pan/tasks/nzb.h" />
+		<Unit filename="pan/tasks/queue.cc" />
+		<Unit filename="pan/tasks/queue.h" />
+		<Unit filename="pan/tasks/socket-impl-gio.cc" />
+		<Unit filename="pan/tasks/socket-impl-gio.h" />
+		<Unit filename="pan/tasks/socket-impl-main.cc" />
+		<Unit filename="pan/tasks/socket-impl-main.h" />
+		<Unit filename="pan/tasks/socket-impl-openssl.cc" />
+		<Unit filename="pan/tasks/socket-impl-openssl.h" />
+		<Unit filename="pan/tasks/socket-impl-scripted.cc" />
+		<Unit filename="pan/tasks/socket-impl-scripted.h" />
+		<Unit filename="pan/tasks/socket.cc" />
+		<Unit filename="pan/tasks/socket.h" />
+		<Unit filename="pan/tasks/task-article.cc" />
+		<Unit filename="pan/tasks/task-article.h" />
+		<Unit filename="pan/tasks/task-groups.cc" />
+		<Unit filename="pan/tasks/task-groups.h" />
 		<Unit filename="pan/tasks/task-multipost.h">
 			<Option target="all_linux" />
 		</Unit>
-		<Unit filename="pan/tasks/task-post.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-post.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-upload.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-upload.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-weak-ordering.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-xover.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task-xover.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/task.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/upload-queue.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/tasks/upload-queue.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/MersenneTwister.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/defgroup.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/filter-info.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/filter-info.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/gnksa-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/gnksa.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/gnksa.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/message-check-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/message-check.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/message-check.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/mime-utils.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/mime-utils.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/numbers-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/numbers.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/numbers.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/rules-info.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/rules-info.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/scorefile-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/scorefile.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/scorefile.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/ssl-utils.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/text-massager-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/text-massager.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/text-massager.h">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/url-find-test.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/url-find.cc">
-			<Option target="all_linux" />
-		</Unit>
-		<Unit filename="pan/usenet-utils/url-find.h">
-			<Option target="all_linux" />
-		</Unit>
+		<Unit filename="pan/tasks/task-post.cc" />
+		<Unit filename="pan/tasks/task-post.h" />
+		<Unit filename="pan/tasks/task-upload.cc" />
+		<Unit filename="pan/tasks/task-upload.h" />
+		<Unit filename="pan/tasks/task-weak-ordering.h" />
+		<Unit filename="pan/tasks/task-xover.cc" />
+		<Unit filename="pan/tasks/task-xover.h" />
+		<Unit filename="pan/tasks/task-xoverinfo.cc" />
+		<Unit filename="pan/tasks/task-xoverinfo.h" />
+		<Unit filename="pan/tasks/task.cc" />
+		<Unit filename="pan/tasks/task.h" />
+		<Unit filename="pan/tasks/upload-queue.cc" />
+		<Unit filename="pan/tasks/upload-queue.h" />
+		<Unit filename="pan/usenet-utils/MersenneTwister.h" />
+		<Unit filename="pan/usenet-utils/blowfish.cc" />
+		<Unit filename="pan/usenet-utils/blowfish.h" />
+		<Unit filename="pan/usenet-utils/blowfish_cyphers.h" />
+		<Unit filename="pan/usenet-utils/defgroup.h" />
+		<Unit filename="pan/usenet-utils/filter-info.cc" />
+		<Unit filename="pan/usenet-utils/filter-info.h" />
+		<Unit filename="pan/usenet-utils/gnksa-test.cc" />
+		<Unit filename="pan/usenet-utils/gnksa.cc" />
+		<Unit filename="pan/usenet-utils/gnksa.h" />
+		<Unit filename="pan/usenet-utils/gpg.cc" />
+		<Unit filename="pan/usenet-utils/gpg.h" />
+		<Unit filename="pan/usenet-utils/message-check-test.cc" />
+		<Unit filename="pan/usenet-utils/message-check.cc" />
+		<Unit filename="pan/usenet-utils/message-check.h" />
+		<Unit filename="pan/usenet-utils/mime-utils.cc" />
+		<Unit filename="pan/usenet-utils/mime-utils.h" />
+		<Unit filename="pan/usenet-utils/numbers-test.cc" />
+		<Unit filename="pan/usenet-utils/numbers.cc" />
+		<Unit filename="pan/usenet-utils/numbers.h" />
+		<Unit filename="pan/usenet-utils/rules-info.cc" />
+		<Unit filename="pan/usenet-utils/rules-info.h" />
+		<Unit filename="pan/usenet-utils/scorefile-test.cc" />
+		<Unit filename="pan/usenet-utils/scorefile.cc" />
+		<Unit filename="pan/usenet-utils/scorefile.h" />
+		<Unit filename="pan/usenet-utils/ssl-utils.h" />
+		<Unit filename="pan/usenet-utils/text-massager-test.cc" />
+		<Unit filename="pan/usenet-utils/text-massager.cc" />
+		<Unit filename="pan/usenet-utils/text-massager.h" />
+		<Unit filename="pan/usenet-utils/url-find-test.cc" />
+		<Unit filename="pan/usenet-utils/url-find.cc" />
+		<Unit filename="pan/usenet-utils/url-find.h" />
 		<Unit filename="uulib/crc32.c">
 			<Option compilerVar="CC" />
 			<Option target="all_linux" />
diff --git a/pan.png b/pan.png
index 1d6ccad..7b01de9 100644
Binary files a/pan.png and b/pan.png differ
diff --git a/pan/data-impl/Makefile.am b/pan/data-impl/Makefile.am
index 9dbb6d7..7c11b43 100644
--- a/pan/data-impl/Makefile.am
+++ b/pan/data-impl/Makefile.am
@@ -15,8 +15,8 @@ libpandata_a_SOURCES = \
  server.cc \
  my-tree.cc \
  task-archive.cc \
- xover.cc \
- hotkeys.cc
+ xover.cc
+
 
 noinst_HEADERS = \
  article-filter.h \
diff --git a/pan/data-impl/data-impl.cc b/pan/data-impl/data-impl.cc
index a047305..6d03af6 100644
--- a/pan/data-impl/data-impl.cc
+++ b/pan/data-impl/data-impl.cc
@@ -124,7 +124,6 @@ DataImpl :: save_state ()
     debug ("data-impl dtor saving xov, newsrc...");
     save_group_xovers (*_data_io);
     save_newsrc_files (*_data_io);
-    save_hotkeys (*_data_io);
   }
 }
 
diff --git a/pan/data-impl/data-impl.h b/pan/data-impl/data-impl.h
index edb4b13..0d86f83 100644
--- a/pan/data-impl/data-impl.h
+++ b/pan/data-impl/data-impl.h
@@ -284,22 +284,11 @@ namespace pan
       void load_group_permissions (const DataIO&);
       void save_group_permissions (DataIO&) const;
 
-      int  load_hotkeys (const DataIO&);
-      void save_hotkeys (DataIO&) const;
-      void create_hotkeys (const DataIO&);
-
       std::string get_newsrc_filename (const Quark& server) const;
       void load_newsrc (const Quark& server, LineReader*, alpha_groups_t&, alpha_groups_t&);
       void load_newsrc_files (const DataIO&);
       void save_newsrc_files (DataIO&) const;
 
-    public:
-
-      virtual int get_all_hotkeys()
-      {
-        return load_hotkeys(*_data_io);
-      }
-
     public: // mutators
 
       virtual void add_groups                 (const Quark       & server,
diff --git a/pan/data/article-cache.cc b/pan/data/article-cache.cc
index ffb8df4..6a431c2 100644
--- a/pan/data/article-cache.cc
+++ b/pan/data/article-cache.cc
@@ -72,8 +72,6 @@ ArticleCache :: filename_to_message_id (char * buf, int len, const char * basena
      *pch = '\0';
   g_strstrip (tmp_basename);
 
-  std::cerr<<"debug "<<tmp_basename<<"\n";
-
   // transform
   out = buf;
   *out++ = '<';
diff --git a/pan/data/data.h b/pan/data/data.h
index 4c9bcf8..0190d7c 100644
--- a/pan/data/data.h
+++ b/pan/data/data.h
@@ -43,8 +43,6 @@
 
 namespace pan
 {
-  typedef std::map<Quark,Quark> hotkeys_t;
-
   class FilterInfo;
   class RulesInfo;
   class Queue;
@@ -176,9 +174,6 @@ namespace pan
   {
 
     public:
-      hotkeys_t _hotkeys, _toggle_hotkeys;
-
-    public:
       struct PasswordData
       {
         Quark server;
@@ -597,13 +592,6 @@ namespace pan
       void set_queue (Queue* q) { _queue = q; }
       Queue* get_queue () { return _queue; }
 
-      const hotkeys_t& get_hotkeys() const { return _hotkeys; }
-      const hotkeys_t& get_toggle_hotkeys() const { return _toggle_hotkeys; }
-      hotkeys_t& get_hotkeys() { return _hotkeys; }
-      hotkeys_t& get_toggle_hotkeys() { return _toggle_hotkeys; }
-      ///TODO move these upper two to dataimpl and make virtual
-      virtual int get_all_hotkeys () = 0;
-
     private:
       Queue * _queue;
 
diff --git a/pan/gui/Makefile.am b/pan/gui/Makefile.am
index 0292501..605b8db 100644
--- a/pan/gui/Makefile.am
+++ b/pan/gui/Makefile.am
@@ -35,7 +35,8 @@ libpangui_a_SOURCES = \
  server-ui.cc \
  task-pane.cc \
  xface.c \
- url.cc
+ url.cc \
+ hotkeys.cc
 
 noinst_HEADERS = \
  action-manager.h \
diff --git a/pan/gui/actions.cc b/pan/gui/actions.cc
index 351f164..329e7e5 100644
--- a/pan/gui/actions.cc
+++ b/pan/gui/actions.cc
@@ -352,7 +352,7 @@ namespace
         G_CALLBACK(do_print) },
 
       { "import-tasks", GTK_STOCK_OPEN,
-        N_("_Import NZB Files..."), NULL,
+        N_("_Import NZB Files..."), "<constrol>O",
         NULL,
         G_CALLBACK(do_import_tasks) },
 
@@ -765,52 +765,6 @@ namespace
 }
 
 void
-pan :: add_hotkeys_to_actions (hotkeys_t& hk, hotkeys_t& t_hk)
-{
-  for (GtkToggleActionEntry *it(toggle_entries), *end(it+n_toggle_entries); it!=end; ++it)
-  {
-    GtkActionEntry* e (reinterpret_cast<GtkActionEntry*>(it));
-    if (t_hk.count(e->name) > 0)
-    {
-      e->accelerator = t_hk[e->name];
-//      std::cerr<<"setting hotkey for action '"<<e->name<<"' to '"<<t_hk[e->name]<<"', count "<<t_hk.count(e->name)<<"\n";
-    }
-  }
-
-  for (GtkActionEntry *it(entries), *end(it+n_entries); it!=end; ++it)
-  {
-    GtkActionEntry* e(it);
-
-    if (hk.count(e->name) > 0)
-    {
-      e->accelerator = hk[e->name];
-//      std::cerr<<"setting hotkey for action '"<<e->name<<"' to '"<<hk[e->name]<<"', count "<<hk.count(e->name)<<"\n";
-    }
-  }
-}
-
-void
-pan :: add_new_hotkeys_from_ui (hotkeys_t& hk, hotkeys_t& t_hk)
-{
-  for (GtkActionEntry *it(entries), *end(it+n_entries); it!=end; ++it)
-  {
-    GtkActionEntry* e(it);
-//    std::cerr<<"setting hotkey for action '"<<e->name<<"' to '"<<(e->accelerator ? e->accelerator : "NULL")<<"\n";
-    hk[e->name] = (e->accelerator ? e->accelerator : "");
-  }
-
-  for (GtkToggleActionEntry *it(toggle_entries), *end(it+n_toggle_entries); it!=end; ++it)
-  {
-    GtkActionEntry* e (reinterpret_cast<GtkActionEntry*>(it));
-//    std::cerr<<"setting hotkey for action '"<<e->name<<"' to '"<<(e->accelerator ? e->accelerator : "NULL")<<"\n";
-    t_hk[e->name] = (e->accelerator ? e->accelerator : "");
-  }
-
-  std::cerr<<"sizes "<<hk.size()<<" "<<t_hk.size()<<"\n";
-
-}
-
-void
 pan :: add_actions (PanUI * ui, GtkUIManager * ui_manager, Prefs * p, Data* data)
 {
   pan_ui = ui;
@@ -818,14 +772,9 @@ pan :: add_actions (PanUI * ui, GtkUIManager * ui_manager, Prefs * p, Data* data
 
   register_my_builtin_icons ();
 
-  int ret = data->get_all_hotkeys ();
-  if (ret > 0)
-    add_hotkeys_to_actions(data->get_hotkeys(), data->get_toggle_hotkeys());
-  else
-  {
-    // create initial shortcuts file for the user
-    add_new_hotkeys_from_ui (data->get_hotkeys(), data->get_toggle_hotkeys());
-  }
+  std::map<gchar*,guint> keymap;
+
+//  int ret = get_all_hotkeys (keymap);
 
   for (GtkToggleActionEntry *it(toggle_entries), *end(it+n_toggle_entries); it!=end; ++it)
   {
diff --git a/pan/gui/actions.h b/pan/gui/actions.h
index 461c028..3519d8b 100644
--- a/pan/gui/actions.h
+++ b/pan/gui/actions.h
@@ -27,8 +27,6 @@
 namespace pan
 {
   void add_actions (PanUI*, GtkUIManager*, Prefs*, Data*);
-  void add_hotkeys_to_actions (hotkeys_t& hk, hotkeys_t& t_hk);
-  void add_new_hotkeys_from_ui (hotkeys_t& hk, hotkeys_t& t_hk);
 }
 
 #endif /* __PAN_H__ */
diff --git a/pan/gui/gui.cc b/pan/gui/gui.cc
index 701d061..144fb63 100644
--- a/pan/gui/gui.cc
+++ b/pan/gui/gui.cc
@@ -76,6 +76,16 @@ extern "C" {
 
 #include <pan/usenet-utils/gpg.h>
 
+namespace
+{
+  std::string get_accel_filename () {
+    char * tmp = g_build_filename (file::get_pan_home().c_str(), "accels.txt", NULL);
+    std::string ret (tmp);
+    g_free (tmp);
+    return ret;
+  }
+}
+
 namespace pan
 {
   void
@@ -167,15 +177,6 @@ void GUI :: show_task_window_cb (GtkWidget *, gpointer gui_gpointer)
   static_cast<GUI*>(gui_gpointer)->activate_action ("show-task-window");
 }
 
-namespace
-{
-  std::string get_accel_filename () {
-    char * tmp = g_build_filename (file::get_pan_home().c_str(), "accels.txt", NULL);
-    std::string ret (tmp);
-    g_free (tmp);
-    return ret;
-  }
-}
 
 GUI :: GUI (Data& data, Queue& queue, Prefs& prefs, GroupPrefs& group_prefs):
   _data (data),
diff --git a/pan/gui/hotkeys.cc b/pan/gui/hotkeys.cc
new file mode 100644
index 0000000..80971a2
--- /dev/null
+++ b/pan/gui/hotkeys.cc
@@ -0,0 +1,56 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/*
+ * Pan - A Newsreader for Gtk+
+ * Copyright (C) 2002-2006  Charles Kerr <charles rebelbase com>
+ *
+ * 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; version 2 of the License.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <config.h>
+extern "C" {
+  #include <glib/gi18n.h>
+  #include <gtk/gtk.h>
+}
+
+#include <pan/general/file-util.h>
+#include <pan/general/macros.h>
+#include <pan/general/log.h>
+
+#include <pan/data-impl/data-io.h>
+#include <pan/data-impl/data-impl.h>
+
+#include "hotkeys.h"
+
+using namespace pan;
+
+namespace
+{
+  void foreach_fill_func          (gpointer data,
+                                   const gchar *accel_path,
+                                   guint accel_key,
+                                   GdkModifierType accel_mods,
+                                   gboolean changed)
+  {
+    std::map<gchar*,guint>* map = static_cast<std::map<gchar*,guint>*>(data);
+
+  }
+}
+
+int
+fill_hotkeys(std::map<gchar*, guint>& keymap)
+{
+  gtk_accel_map_foreach (&keymap, foreach_fill_func);
+  return 0;
+}
+
diff --git a/pan/gui/pan.cc b/pan/gui/pan.cc
index 15d5141..e487c8b 100644
--- a/pan/gui/pan.cc
+++ b/pan/gui/pan.cc
@@ -816,7 +816,6 @@ _("General Options\n"
   pan_dbus_deinit (Pan* pan)
   {
     g_bus_unown_name(pan->dbus_id);
-    if (dbus_connection) g_dbus_connection_close(dbus_connection,NULL,0,NULL);
   }
 
   /***
@@ -940,20 +939,23 @@ main (int argc, char *argv[])
     GVariant* var;
 
     if (!dbus_connection) goto _fail;
+    if (pan->dbus_id == -1)
+    {
 
-    var = g_variant_new ("(sssbb)",
-                    groups.c_str(), nzb_output_path.c_str(), nzb_str.c_str(),  gui, nzb);
-    g_dbus_connection_call_sync (dbus_connection,
-                           PAN_DBUS_SERVICE_NAME,
-                           PAN_DBUS_SERVICE_PATH,
-                           "news.pan.NZB",
-                           "NZBEnqueue",
-                           var,
-                           NULL,
-                           G_DBUS_CALL_FLAGS_NONE,
-                           -1,
-                           NULL,
-                           &error);
+      var = g_variant_new ("(sssbb)",
+                      groups.c_str(), nzb_output_path.c_str(), nzb_str.c_str(),  gui, nzb);
+      g_dbus_connection_call_sync (dbus_connection,
+                             PAN_DBUS_SERVICE_NAME,
+                             PAN_DBUS_SERVICE_PATH,
+                             "news.pan.NZB",
+                             "NZBEnqueue",
+                             var,
+                             NULL,
+                             G_DBUS_CALL_FLAGS_NONE,
+                             -1,
+                             NULL,
+                             &error);
+    }
     if (!error)
     {
       std::cout<<"Added "<<nzb_files.size()<<" files to the queue. Exiting.\n";
diff --git a/pan/gui/prefs-ui.cc b/pan/gui/prefs-ui.cc
index e72a69b..8289b13 100644
--- a/pan/gui/prefs-ui.cc
+++ b/pan/gui/prefs-ui.cc
@@ -24,6 +24,7 @@ extern "C" {
 }
 #include <pan/general/debug.h>
 #include <pan/general/macros.h>
+#include <pan/general/file-util.h>
 #include <pan/icons/pan-pixbufs.h>
 #include "hig.h"
 #include "pad.h"
@@ -33,14 +34,160 @@ extern "C" {
 #include "url.h"
 #include "gtk-compat.h"
 #include "e-charset-dialog.h"
+#include "hotkeys.h"
 
 using namespace pan;
 
 namespace
 {
+  std::string get_accel_filename () {
+    char * tmp = g_build_filename (file::get_pan_home().c_str(), "accels.txt", NULL);
+    std::string ret (tmp);
+    g_free (tmp);
+    return ret;
+  }
+
+  typedef struct std::map<std::string,GtkAccelKey> keymap_t;
+
+  struct HotkeyData
+  {
+    GtkWidget* w;
+    int* row;
+    Prefs* prefs;
+    keymap_t keys;
+  };
+
+  static HotkeyData hotkey_data;
+
+//  void hotkey_entry_icon_press_cb(GtkEntry             * entry,
+//                                  GtkEntryIconPosition,
+//                                  GdkEvent             *,
+//                                  gpointer               gpointer)
+//  {
+//    char* ptr = static_cast<char*>(gpointer);
+//
+//    guint key;
+//    GdkModifierType mod;
+//
+//    gtk_accelerator_parse (gtk_entry_get_text(entry),&key,&mod);
+//
+//    std::cerr<<"click parse "<<ptr<<" "<<key<<" "<<mod<<"\n";
+//
+//    GtkAccelKey newkey;
+//
+//    // reset the other keybinding
+//    gtk_accel_map_change_entry ("", key, mod, true);
+//
+//    newkey.accel_key = key;
+//    newkey.accel_mods = mod;
+//
+//    gtk_accel_map_change_entry (ptr, key, mod, true);
+//    hotkey_data.keys[ptr] = newkey;
+//  }
+
+  // TODO offer replace with context menu!
+  void hotkey_entry_changed_cb (GtkEntry * e, gpointer gpointer)
+  {
+
+    char* name = static_cast<char*>(gpointer);
+    const char * value = gtk_entry_get_text(e);
+
+    gtk_entry_set_icon_activatable(e, GTK_ENTRY_ICON_PRIMARY, false);
+    gtk_entry_set_icon_from_stock(e, GTK_ENTRY_ICON_PRIMARY, 0);
+    gtk_entry_set_icon_tooltip_text (e, GTK_ENTRY_ICON_PRIMARY, 0);
+
+    // empty text
+    if (!value || !*value)
+    {
+      gtk_entry_set_icon_from_stock(e, GTK_ENTRY_ICON_PRIMARY, 0);
+      gtk_entry_set_icon_tooltip_text (e, GTK_ENTRY_ICON_PRIMARY, 0);
+      // reset in map and remove accelerator
+      GtkAccelKey tmp;
+      guint tmpkey;
+      GdkModifierType tmpmod;
+      gtk_accelerator_parse ("",&tmpkey,&tmpmod);
+      hotkey_data.keys[name] = tmp;
+      gtk_accel_map_change_entry (name, tmpkey, tmpmod, true);
+      return;
+    }
+
+    guint key;
+    GdkModifierType mod;
+    GtkAccelKey acc_key;
+
+    gtk_accelerator_parse (value,&key,&mod);
+    acc_key.accel_key = key;
+    acc_key.accel_mods = mod;
+
+    if (!gtk_accelerator_valid(acc_key.accel_key, acc_key.accel_mods))
+    {
+      gtk_entry_set_icon_from_stock(e, GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_WARNING);
+      gtk_entry_set_icon_tooltip_text (e, GTK_ENTRY_ICON_PRIMARY, _("Error: Shortkey is invalid!"));
+      return;
+    }
+
+    bool found(false);
+
+    // search for duplicate key entry
+    foreach (keymap_t, hotkey_data.keys, it)
+    {
+      if (!strcmp(name, it->first.c_str())) continue;
+      if (it->second.accel_key == key && it->second.accel_mods == mod) { found=true; break;}
+    }
+
+
+    if (found)
+    {
+      gtk_entry_set_icon_from_stock(e, GTK_ENTRY_ICON_PRIMARY, GTK_STOCK_DIALOG_WARNING);
+      gtk_entry_set_icon_tooltip_text (e, GTK_ENTRY_ICON_PRIMARY, _("Error: Shortkey already exists!"));
+      gtk_entry_set_icon_activatable(e, GTK_ENTRY_ICON_PRIMARY, true);
+
+    }
+    else
+    {
+      hotkey_data.keys[name] = acc_key;
+    }
+
+  }
+
+  void process_accels  (gpointer _data,
+                       const gchar *accel_path,
+                       guint accel_key,
+                       GdkModifierType accel_mods,
+                       gboolean changed)
+  {
+    HotkeyData* data = static_cast<HotkeyData*>(_data);
+    GtkAccelKey key;
+    key.accel_key = accel_key;
+    key.accel_mods = accel_mods;
+    data->keys[accel_path] = key;
+
+  }
+
+
+  void save_accels()
+  {
+
+    // get changed accels from map and reset them to their values
+    foreach (keymap_t, hotkey_data.keys, it)
+    {
+      gtk_accel_map_change_entry (it->first.c_str(),
+                                  it->second.accel_key,
+                                  it->second.accel_mods,
+                                  true);
+
+    }
+
+    // save 'em
+    const std::string accel_filename (get_accel_filename());
+    gtk_accel_map_save (accel_filename.c_str());
+    chmod (accel_filename.c_str(), 0600);
+  }
+
   void delete_prefs_dialog (gpointer castme)
   {
     PrefsDialog* pd(static_cast<PrefsDialog*>(castme));
+    save_accels();
     pd->prefs().remove_listener(pd);
     delete pd;
   }
@@ -95,6 +242,15 @@ namespace
   }
 
 
+  GtkWidget* new_hotkey_entry (const char* value, const char* name)
+  {
+    GtkWidget * t = gtk_entry_new();
+    gtk_entry_set_text (GTK_ENTRY(t), value);
+    g_signal_connect (t, "changed", G_CALLBACK(hotkey_entry_changed_cb), gpointer(name));
+//    g_signal_connect (t, "icon-press", G_CALLBACK(hotkey_entry_icon_press_cb), gpointer(name));
+    return t;
+  }
+
   GtkWidget* new_layout_radio (GtkWidget* prev, const guint8* line, const char* value, std::string& cur, Prefs& prefs)
   {
     GtkWidget * r = prev==0
@@ -140,6 +296,23 @@ namespace
     return r;
   }
 
+  void fill_pref_hotkeys(GtkWidget* t, int& row, Prefs& prefs)
+  {
+
+    HIG::workarea_add_section_spacer (t, row, hotkey_data.keys.size());
+
+    GtkWidget* w, *l;
+    gchar* keyval;
+
+    foreach (keymap_t, hotkey_data.keys, it)
+    {
+      keyval = gtk_accelerator_name (it->second.accel_key, it->second.accel_mods);
+      w = new_hotkey_entry(keyval, it->first.c_str());
+      l = gtk_label_new(it->first.c_str());
+      HIG :: workarea_add_row (t, &row, w, l);
+    }
+  }
+
   void set_prefs_string_from_editable (GtkEditable * editable, gpointer prefs_gpointer)
   {
     Prefs * prefs (static_cast<Prefs*>(prefs_gpointer));
@@ -541,6 +714,8 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
 {
   prefs.add_listener(this);
 
+  gtk_accel_map_foreach (&hotkey_data, process_accels);
+
   GtkWidget * dialog = gtk_dialog_new_with_buttons (_("Pan: Preferences"), parent,
                                                     GTK_DIALOG_DESTROY_WITH_PARENT,
                                                     GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
@@ -548,8 +723,12 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
   gtk_window_set_role (GTK_WINDOW(dialog), "pan-preferences-dialog");
   g_signal_connect (dialog, "response", G_CALLBACK(response_cb), this);
   g_signal_connect_swapped (dialog, "destroy", G_CALLBACK(delete_prefs_dialog), this);
+
   GtkWidget * notebook = gtk_notebook_new ();
 
+  gtk_notebook_set_homogeneous_tabs (GTK_NOTEBOOK(notebook), true);
+  gtk_notebook_set_scrollable (GTK_NOTEBOOK(notebook), true);
+
   // Behavior
   int row (0);
   GtkWidget *h, *w, *l, *b, *t;
@@ -605,7 +784,26 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
   HIG :: workarea_finish (t, &row);
   gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Behavior")));
 
+  // Hotkeys
+  row = 0;
+  t = HIG :: workarea_create ();
+  fill_pref_hotkeys(t, row, _prefs);
+
+  HIG :: workarea_finish (t, &row);
+
+  GtkWidget* scroll = gtk_scrolled_window_new (NULL, NULL);
+  gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scroll), GTK_SHADOW_IN);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scroll),
+                                  GTK_POLICY_AUTOMATIC,
+                                  GTK_POLICY_AUTOMATIC);
+  gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scroll), t);
+
+  gtk_widget_show_all (scroll);
+
+  gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scroll, gtk_label_new_with_mnemonic(_("_Hotkeys")));
+
   //charset
+  row = 0;
   t = HIG :: workarea_create ();
   HIG :: workarea_add_section_spacer (t, row, 1);
   HIG :: workarea_add_section_title (t, &row, _("Language Settings"));
@@ -619,6 +817,7 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
   gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Charset")));
 
   // systray and notify popup
+  row = 0;
   t = HIG :: workarea_create ();
   HIG :: workarea_add_section_title (t, &row, _("System Tray Behavior"));
   HIG :: workarea_add_section_spacer (t, row, 3);
@@ -634,6 +833,7 @@ PrefsDialog :: PrefsDialog (Prefs& prefs, GtkWindow* parent):
   gtk_notebook_append_page (GTK_NOTEBOOK(notebook), t, gtk_label_new_with_mnemonic(_("_Status and Notifications")));
 
   // Autosave Features
+  row = 0;
   t = HIG :: workarea_create ();
   HIG :: workarea_add_section_spacer (t, row, 2);
   HIG :: workarea_add_section_title (t, &row, _("Autosave Article Draft"));
diff --git a/pan/gui/prefs.cc b/pan/gui/prefs.cc
index 8e831f3..1b89bc9 100644
--- a/pan/gui/prefs.cc
+++ b/pan/gui/prefs.cc
@@ -31,6 +31,7 @@ extern "C" {
 #include <pan/general/log.h>
 #include <pan/general/macros.h>
 #include "prefs.h"
+#include "hotkeys.h"
 
 using namespace pan;
 
@@ -98,6 +99,16 @@ Prefs :: start_element (GMarkupParseContext *,
     if (name && *name && value && *value)
       prefs.set_color (name, value);
   }
+
+//  if (s == "hotkey") {
+//    const char * name (0);
+//    const char * value (0);
+//    for (const char **k(attribute_names), **v(attribute_vals); *k; ++k, ++v)
+//      if (!strcmp (*k,"name"))  name = *v;
+//      else if (!strcmp(*k,"value")) value = *v;
+//    if (name && *name && value && *value)
+//      prefs.set_hotkey (name, value);
+//  }
 }
 
 void
@@ -370,3 +381,19 @@ Prefs :: get_color_str_wo_fallback (const StringView& key) const
   const GdkColor& col(_colors[key]);
   return color_to_string (col);
 }
+
+//void
+//Prefs :: set_hotkey (const StringView& key, const StringView& value)
+//{
+////  _hotkeys[key] = value;
+////  fire_hotkey_changed (key, value);
+//}
+
+
+//std::string
+//Prefs :: get_hotkey (const StringView& key) const
+//{
+//  std::string res;
+//  if (!_hotkeys.count(key)) return "";
+//  return _hotkeys[key];
+//}
diff --git a/pan/gui/prefs.h b/pan/gui/prefs.h
index 8002669..1f2a2a7 100644
--- a/pan/gui/prefs.h
+++ b/pan/gui/prefs.h
@@ -43,6 +43,7 @@ namespace pan
         virtual void on_prefs_int_changed (const StringView& key, int color) = 0;
         virtual void on_prefs_string_changed (const StringView& key, const StringView& value) = 0;
         virtual void on_prefs_color_changed (const StringView& key, const GdkColor& color) = 0;
+        virtual void on_prefs_hotkey_changed (const StringView& key, const StringView& value) {}
       };
       void add_listener (Listener* l) { _listeners.insert(l); }
       void remove_listener (Listener* l) {_listeners.erase(l); }
@@ -68,6 +69,10 @@ namespace pan
         for (listeners_t::iterator it(_listeners.begin()), end(_listeners.end()); it!=end; )
           (*it++)->on_prefs_color_changed (key, value);
       }
+      void fire_hotkey_changed (const StringView& key, const StringView& value) {
+        for (listeners_t::iterator it(_listeners.begin()), end(_listeners.end()); it!=end; )
+          (*it++)->on_prefs_hotkey_changed (key, value);
+      }
 
     public:
       static void start_element (GMarkupParseContext *context,
@@ -95,6 +100,9 @@ namespace pan
       GdkColor get_color (const StringView& key, const GdkColor& fallback) const;
       GdkColor get_color (const StringView& key, const StringView& fallback_str) const;
 
+//      void set_hotkey (const StringView& key, const StringView& value);
+//      std::string get_hotkey (const StringView& key) const;
+
       void set_window (const StringView& key, GtkWindow* window,
                        int default_x, int default_y,
                        int default_width, int default_height);
@@ -111,6 +119,7 @@ namespace pan
     public:
       void to_string (int indent, std::string& setme) const;
       void from_string (const StringView& xml);
+      void get_hotkeys ();
 
     private:
       struct Geometry {
@@ -131,6 +140,9 @@ namespace pan
       mutable colors_t _colors;
       typedef std::map<std::string,int> ints_t;
       mutable ints_t _ints;
+      typedef std::map<std::string,std::string> hotkeys_t;
+      mutable hotkeys_t _hotkeys;
+
 
     public:
       bool _rules_changed;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]