Root/stardict/patches/020-add-nanonote-support.patch

1add CONFIG_NANONOTE support
2
3From: Xiangfu Liu <xiangfu@sharism.cc>
4
5
6---
7
8 configure.in | 36 +++++++++++++++++---------
9 src/Makefile.am | 6 ++++
10 src/class_factory.cpp | 6 ++++
11 src/conf.cpp | 4 +++
12 src/desktop.cpp | 2 +
13 src/mainwin.cpp | 8 +++++-
14 src/stardict.cpp | 67 ++++++++++++++++++++++++++++++++++++-------------
15 7 files changed, 94 insertions(+), 35 deletions(-)
16
17
18diff --git a/configure.in b/configure.in
19index 83d3d95..4b15e43 100644
20--- a/configure.in
21+++ b/configure.in
22@@ -296,14 +296,18 @@ dnl ================================================================
23 AC_ARG_ENABLE(gnome-support, AC_HELP_STRING([--disable-gnome-support], [Disable gnome support]))
24 AC_ARG_ENABLE(gpe-support, AC_HELP_STRING([--enable-gpe-support], [Enable gpe support]))
25 AC_ARG_ENABLE(maemo-support, AC_HELP_STRING([--enable-maemo-support], [Enable maemo support]))
26+AC_ARG_ENABLE(nanonote-support, AC_HELP_STRING([--enable-nanonote-support], [Enable Qi Hardware NanoNote support]))
27 AM_CONDITIONAL(GNOME_SUPPORT, test "x${enable_gpe_support}" != "xyes" && test "x${enable_maemo_support}" != "xyes" && test "x${enable_gnome_support}" != "xno")
28 AM_CONDITIONAL(GPE_SUPPORT, test "x${enable_gpe_support}" = "xyes")
29 AM_CONDITIONAL(MAEMO_SUPPORT, test "x${enable_maemo_support}" = "xyes")
30+AM_CONDITIONAL(NANONOTE_SUPPORT, test "x${enable_nanonote_support}" = "xyes")
31 
32 if test "x${enable_gpe_support}" = "xyes" ; then
33   DEP_MODULES="gtk+-2.0 >= 2.12 glib-2.0 >= 2.14 gthread-2.0 libgpewidget >= 0.109"
34 elif test "x${enable_maemo_support}" = "xyes" ; then
35   DEP_MODULES="gtk+-2.0 >= 2.12 gthread-2.0 gconf-2.0 >= 2.6 hildon-libs >= 0.12"
36+elif test "x${enable_nanonote_support}" = "xyes" ; then
37+ DEP_MODULES="gtk+-2.0 >= 2.12 gthread-2.0 gconf-2.0 >= 2.6"
38 elif test "x${enable_gnome_support}" = "xno" ; then
39   DEP_MODULES="gtk+-2.0 >= 2.12 gthread-2.0"
40 else
41@@ -329,6 +333,11 @@ elif test "x${enable_maemo_support}" = "xyes" ; then
42     fi
43     AM_GCONF_SOURCE_2
44     AM_CONDITIONAL(SCHEMAS_INSTALL, test x$schemas_install = xtrue)
45+elif test "x${enable_nanonote_support}" = "xyes" ; then
46+ echo "Enable Qi Hardware NanoNote suppport";
47+ AC_DEFINE([CONFIG_NANONOTE],[], [Compile with nanonote support])
48+ AM_CONDITIONAL(SCHEMAS_INSTALL, test "x${enable_nanonote_support}" != "xyes")
49+ AM_CONDITIONAL(GCONF_SCHEMAS_INSTALL, test "x${enable_nanonote_support}" != "xyes")
50 elif test "x${enable_gnome_support}" = "xno" ; then
51     echo "Disable gnome support";
52     AC_DEFINE([CONFIG_GTK],[], [Compile without gnome support])
53@@ -414,21 +423,21 @@ dnl ==========================================================================
54 
55 # Checks for header files. need by Solaris.
56 AC_PATH_XTRA
57-if test -n "$X_CFLAGS"; then
58-CPPFLAGS="$CPPFLAGS $X_CFLAGS"
59-fi
60-if test -n "$X_LIBS"; then
61-LDFLAGS="$LDFLAGS $X_LIBS"
62-fi
63-if test -n "$X_PRE_LIBS"; then
64-LDFLAGS="$LDFLAGS $X_PRE_LIBS"
65-fi
66-if test -n "$X_EXTRA_LIBS"; then
67-LDFLAGS="$LDFLAGS $X_EXTRA_LIBS"
68-fi
69+#if test -n "$X_CFLAGS"; then
70+#CPPFLAGS="$CPPFLAGS $X_CFLAGS"
71+#fi
72+#if test -n "$X_LIBS"; then
73+#LDFLAGS="$LDFLAGS $X_LIBS"
74+#fi
75+#if test -n "$X_PRE_LIBS"; then
76+#LDFLAGS="$LDFLAGS $X_PRE_LIBS"
77+#fi
78+#if test -n "$X_EXTRA_LIBS"; then
79+#LDFLAGS="$LDFLAGS $X_EXTRA_LIBS"
80+#fi
81 
82 # Checks for libraries.
83-AC_CHECK_LIB([X11], [main], , [AC_MSG_ERROR([X11 lib not found])])
84+#AC_CHECK_LIB([X11], [main], , [AC_MSG_ERROR([X11 lib not found])])
85 
86 AC_SUBST(STARDICT_LIBS)
87 AC_SUBST(STARDICT_CFLAGS)
88@@ -494,3 +503,4 @@ echo "
89 Type \"make\" to compile StarDict.
90 
91 "
92+
93diff --git a/src/Makefile.am b/src/Makefile.am
94index bca4861..1499775 100644
95--- a/src/Makefile.am
96+++ b/src/Makefile.am
97@@ -34,9 +34,13 @@ CONFIG_FILE_MODULE = gconf_file.cpp gconf_file.hpp
98 else
99 CONFIG_FILE_MODULE = inifile.cpp inifile.hpp
100 endif
101+if NANONOTE_SUPPORT
102+X11_ISKEYSPRESSED_FILE_MODULE =
103+endif
104 else
105 CONFIG_FILE_MODULE = gconf_file.cpp gconf_file.hpp
106 IDL_FILE = GNOME_Stardict.idl
107+X11_ISKEYSPRESSED_FILE_MODULE = x11_iskeyspressed.cpp x11_iskeyspressed.hpp
108 
109 IDL_SOURCES = \
110     GNOME_Stardict-stubs.c \
111@@ -73,7 +77,7 @@ stardict_SOURCES = \
112     class_factory.cpp class_factory.hpp \
113     config_file.hpp \
114     $(CONFIG_FILE_MODULE) \
115- x11_iskeyspressed.cpp x11_iskeyspressed.hpp \
116+ $(X11_ISKEYSPRESSED_FILE_MODULE) \
117     gtk_iskeyspressed.cpp gtk_iskeyspressed.hpp \
118     progresswin.cpp progresswin.hpp \
119     tray.cpp tray.hpp \
120diff --git a/src/class_factory.cpp b/src/class_factory.cpp
121index 8bff538..653111e 100644
122--- a/src/class_factory.cpp
123+++ b/src/class_factory.cpp
124@@ -34,7 +34,9 @@
125 # include "win32/win32_iskeyspressed.h"
126 # include "win32/systray.h"
127 #else
128+#ifndef CONFIG_NANONOTE
129 # include "x11_iskeyspressed.hpp"
130+#endif
131 # include "docklet.h"
132 #endif
133 
134@@ -51,8 +53,10 @@ void *PlatformFactory::create_class_by_name(const std::string& name, void *param
135         return new inifile(get_user_config_dir()+ G_DIR_SEPARATOR_S "stardict.cfg");
136 #endif
137     } else if (name=="hotkeys") {
138-#ifdef _WIN32
139+#if defined(_WIN32)
140         return new win32_hotkeys();
141+#elif defined(CONFIG_NANONOTE)
142+ return NULL;
143 #else
144         return new x11_hotkeys(GTK_WINDOW(param));
145 #endif
146diff --git a/src/conf.cpp b/src/conf.cpp
147index 2d0f89d..9f5e308 100644
148--- a/src/conf.cpp
149+++ b/src/conf.cpp
150@@ -33,6 +33,10 @@
151 const int DEFAULT_WINDOW_WIDTH=238;
152 const int DEFAULT_WINDOW_HEIGHT=279;
153 const int DEFAULT_HPANED_POS=79;
154+#elif defined(CONFIG_NANONOTE)
155+const int DEFAULT_WINDOW_WIDTH=320;
156+const int DEFAULT_WINDOW_HEIGHT=240;
157+const int DEFAULT_HPANED_POS=79;
158 #else
159 const int DEFAULT_WINDOW_WIDTH=463;
160 const int DEFAULT_WINDOW_HEIGHT=321;
161diff --git a/src/desktop.cpp b/src/desktop.cpp
162index 9d08caf..4f95bcb 100644
163--- a/src/desktop.cpp
164+++ b/src/desktop.cpp
165@@ -37,7 +37,7 @@
166 
167 #include "desktop.hpp"
168 
169-#if defined(CONFIG_GTK) || defined(CONFIG_GPE) || defined(CONFIG_MAEMO)
170+#if defined(CONFIG_GTK) || defined(CONFIG_GPE) || defined(CONFIG_MAEMO) || defined(CONFIG_NANONOTE)
171 static void spawn_command(const gchar *exe, const gchar *arg)
172 {
173   gchar *qarg = g_shell_quote(arg);
174diff --git a/src/mainwin.cpp b/src/mainwin.cpp
175index 7005f7b..f7dac0b 100644
176--- a/src/mainwin.cpp
177+++ b/src/mainwin.cpp
178@@ -129,10 +129,12 @@ void TopWin::Create(GtkWidget *vbox)
179     gtk_box_pack_start(GTK_BOX(hbox),button,false,false,0);
180     gtk_widget_set_tooltip_text(button,_("Go Back - Right button: history (Alt+Left)"));
181 
182+#ifndef CONFIG_NANONOTE
183     GtkWidget *label;
184     label = gtk_label_new("\t");
185     gtk_widget_show(label);
186     gtk_box_pack_start(GTK_BOX(hbox),label,false,false,0);
187+#endif
188 
189     button=gtk_button_new();
190     gtk_container_add(GTK_CONTAINER(button),gtk_image_new_from_stock(GTK_STOCK_HOME,GTK_ICON_SIZE_BUTTON));
191@@ -1807,7 +1809,10 @@ void TextWin::ShowTips()
192   query_result = TEXT_WIN_TIPS;
193   view->set_text(
194       _(" Welcome to StarDict!\n\n"
195- " Press Ctrl+Q to quit. Press Alt+Z to iconify the window or Alt+X to hide the window.\n"
196+ " Press Ctrl+Q to quit. \n"
197+#ifndef CONFIG_NANONOTE
198+ " Press Alt+Z to iconify the window or Alt+X to hide the window.\n"
199+#endif
200         " Press Alt+C or ESC to clear the input entry's text.\n"
201         " Press Space key to move focus to the input entry.\n"
202         " If the query word was not found, you can press Tab key to select the first word in the word list.\n"
203@@ -2665,6 +2670,7 @@ void MidWin::Create(GtkWidget *vbox)
204 
205     notebook = gtk_notebook_new();
206     gtk_widget_show(notebook);
207+ gtk_widget_set_size_request(GTK_WIDGET(notebook), 50, 20);
208     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(notebook), false);
209     gtk_notebook_set_show_border(GTK_NOTEBOOK(notebook),false);
210 
211diff --git a/src/stardict.cpp b/src/stardict.cpp
212index 326ca4a..2d4acb8 100644
213--- a/src/stardict.cpp
214+++ b/src/stardict.cpp
215@@ -214,7 +214,9 @@ void AppCore::do_send_http_request(const char* shost, const char* sfile, get_htt
216 
217 void AppCore::set_news(const char *news, const char *links)
218 {
219+#ifndef CONFIG_NANONOTE
220     gpAppFrame->oBottomWin.set_news(news, links);
221+#endif
222 }
223 
224 void AppCore::show_netdict_resp(NetDictResponse *resp, bool ismainwin)
225@@ -350,12 +352,13 @@ void AppCore::Create(gchar *queryword)
226     gtk_container_add(GTK_CONTAINER(window),vbox);
227     oTopWin.Create(vbox);
228     oMidWin.Create(vbox);
229+ oFloatWin.Create();
230+ bool scan=conf->get_bool_at("dictionary/scan_selection");
231+#ifndef CONFIG_NANONOTE
232     oBottomWin.Create(vbox);
233     unlock_keys.reset(static_cast<hotkeys *>(PlatformFactory::create_class_by_name("hotkeys",
234                                                GTK_WINDOW(window))));
235     unlock_keys->set_comb(combnum2str(conf->get_int_at("dictionary/scan_modifier_key")));
236- oFloatWin.Create();
237- bool scan=conf->get_bool_at("dictionary/scan_selection");
238     oDockLet.reset(PlatformFactory::create_tray_icon(window, scan,
239                              oAppSkin));
240     oDockLet->on_quit_.connect(sigc::mem_fun(this, &AppCore::Quit));
241@@ -365,6 +368,7 @@ void AppCore::Create(gchar *queryword)
242         sigc::mem_fun(this, &AppCore::on_maximize));
243     oDockLet->on_middle_btn_click_.connect(
244         sigc::mem_fun(this, &AppCore::on_middle_button_click));
245+#endif // CONFIG_NANONOTE
246     oSelection.Init();
247 #ifdef _WIN32
248     oClipboard.Init();
249@@ -393,7 +397,9 @@ void AppCore::Create(gchar *queryword)
250     //NOTICE: when docklet embedded failed,it should always show the window,but,how to detect the failure?
251     // As stardict is FOR GNOME,so i don't want to consider the case that haven't the Notification area applet.
252     if (!hide_option && (queryword || !hide)) {
253+#ifndef CONFIG_NANONOTE
254         oDockLet->hide_state();
255+#endif
256         gtk_widget_show(window);
257     } else {
258 // This may be needed, so gtk_window_get_screen() in gtk_iskeyspressed.cpp can always work.
259@@ -423,8 +429,12 @@ void AppCore::Create(gchar *queryword)
260 
261 gboolean AppCore::on_delete_event(GtkWidget * window, GdkEvent *event , AppCore *app)
262 {
263+#ifndef CONFIG_NANONOTE
264     app->oDockLet->minimize_to_tray();
265- return TRUE;
266+#endif
267+ g_print("Quitting..\n");
268+ gtk_main_quit();
269+ return FALSE;
270 }
271 
272 gboolean AppCore::on_window_state_event(GtkWidget *window,
273@@ -432,12 +442,16 @@ gboolean AppCore::on_window_state_event(GtkWidget *window,
274 {
275     switch (event->changed_mask) {
276     case GDK_WINDOW_STATE_WITHDRAWN:
277+#ifndef CONFIG_NANONOTE
278         if (conf->get_bool_at("dictionary/scan_selection"))
279             app->oDockLet->set_scan_mode(true);
280         else
281             app->oDockLet->set_scan_mode(false);
282+#endif
283         if (!(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN)) {
284+#ifndef CONFIG_NANONOTE
285             app->oDockLet->hide_state();
286+#endif
287             if (app->oTopWin.get_text()[0])
288                 gtk_widget_grab_focus(app->oMidWin.oTextWin.view->widget());
289         }
290@@ -475,7 +489,9 @@ gboolean AppCore::vKeyPressReleaseCallback(GtkWidget * window, GdkEventKey *even
291     }
292     else if ((event->keyval==GDK_x || event->keyval==GDK_X) && only_mod1_pressed) {
293         if (event->type==GDK_KEY_PRESS) {
294+#ifndef CONFIG_NANONOTE
295             oAppCore->oDockLet->minimize_to_tray();
296+#endif
297         }
298     }
299     else if ((event->keyval==GDK_z || event->keyval==GDK_Z) && only_mod1_pressed) {
300@@ -2005,10 +2021,20 @@ private:
301 
302 void AppCore::PopupPrefsDlg()
303 {
304+ static std::list<std::string> posb_combs;
305+
306+ if (posb_combs.empty()) {
307+ posb_combs.push_back("Win");
308+ posb_combs.push_back("Shift");
309+ posb_combs.push_back("Alt");
310+ posb_combs.push_back("Ctrl");
311+ posb_combs.push_back("Ctrl+Alt");
312+ }
313+
314     if (!prefs_dlg) {
315         prefs_dlg = new PrefsDlg(GTK_WINDOW(window),
316- get_impl(oAppSkin.icon),
317- unlock_keys->possible_combs());
318+ get_impl(oAppSkin.icon),
319+ posb_combs);
320         bool enbcol =
321             conf->get_bool_at("dictionary/enable_collation");
322         int colf =
323@@ -2105,16 +2131,16 @@ void AppCore::End()
324 #endif
325     oFloatWin.End();
326 
327- oDockLet.reset(0);
328-
329     if (dict_manage_dlg)
330         dict_manage_dlg->Close();
331     if (prefs_dlg)
332         prefs_dlg->Close(); // After user open the preferences dialog, then choose quit in the notification icon, this dialog can be closed.
333     oTopWin.Destroy();
334     oMidWin.oIndexWin.oListWin.Destroy();
335+#ifndef CONFIG_NANONOTE
336+ oDockLet.reset(0);
337     oBottomWin.Destroy();
338-
339+#endif
340     gtk_widget_destroy(window);
341 }
342 
343@@ -2153,17 +2179,17 @@ void AppCore::Quit()
344     if (!conf->get_bool_at("main_window/maximized")) {
345         gint width, height;
346         gtk_window_get_size(GTK_WINDOW(window), &width, &height);
347- conf->set_int_at("main_window/window_width", width);
348- conf->set_int_at("main_window/window_height", height);
349+ conf->set_int_at("main_window/window_width", width);
350+ conf->set_int_at("main_window/window_height", height);
351     }
352     gint pos = gtk_paned_get_position(GTK_PANED(oMidWin.hpaned));
353- conf->set_int_at("main_window/hpaned_pos", pos);
354+ conf->set_int_at("main_window/hpaned_pos", pos);
355 
356     if (conf->get_bool_at("floating_window/lock")) {
357         gint x, y;
358         gtk_window_get_position(GTK_WINDOW(oFloatWin.FloatWindow), &x, &y);
359- conf->set_int_at("floating_window/lock_x", x);
360- conf->set_int_at("floating_window/lock_y", y);
361+ conf->set_int_at("floating_window/lock_x", x);
362+ conf->set_int_at("floating_window/lock_y", y);
363     }
364 
365     End();
366@@ -2171,9 +2197,11 @@ void AppCore::Quit()
367 #ifdef CONFIG_GNOME
368     bonobo_object_unref (stardict_app_server);
369 #endif
370- unlock_keys.reset(0);
371- conf.reset(0);
372- gtk_main_quit();
373+#ifndef CONFIG_NANONOTE
374+ unlock_keys.reset(0);
375+#endif
376+ conf.reset(0);
377+ gtk_main_quit();
378 }
379 
380 void AppCore::on_main_win_hide_list_changed(const baseconfval* hideval)
381@@ -2198,12 +2226,13 @@ void AppCore::on_dict_scan_select_changed(const baseconfval* scanval)
382     bool scan = static_cast<const confval<bool> *>(scanval)->val_;
383 
384     gtk_widget_set_sensitive(oFloatWin.StopButton, scan);
385+#ifndef CONFIG_NANONOTE
386     if (scan != gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(oBottomWin.ScanSelectionCheckButton)))
387         gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(oBottomWin.ScanSelectionCheckButton), scan);
388-
389     oDockLet->set_scan_mode(scan);
390     if (GTK_WIDGET_VISIBLE(window))
391         oDockLet->hide_state();
392+#endif
393     if (scan) {
394         bool lock=conf->get_bool_at("floating_window/lock");
395         if (lock && !oFloatWin.QueryingWord.empty())
396@@ -2263,8 +2292,10 @@ void AppCore::on_floatwin_lock_y_changed(const baseconfval* lock_y_val)
397 
398 void AppCore::on_scan_modifier_key_changed(const baseconfval* keyval)
399 {
400+#ifndef CONFIG_NANONOTE
401     int key = static_cast<const confval<int> *>(keyval)->val_;
402     unlock_keys->set_comb(combnum2str(key));
403+#endif
404 }
405 
406 gchar* GetPureEnglishAlpha(gchar *str)
407@@ -2439,7 +2470,7 @@ int main(int argc,char **argv)
408             g_warning("Cannot create directory %s.", userdir.c_str());
409     }
410     g_thread_init (NULL);
411-#if defined(_WIN32) || defined(CONFIG_GTK) || defined(CONFIG_MAEMO)
412+#if defined(_WIN32) || defined(CONFIG_GTK) || defined(CONFIG_MAEMO) || defined(CONFIG_NANONOTE)
413     gtk_set_locale();
414     gtk_init(&argc, &argv);
415 #endif
416

Archive Download this file



interactive