+2007-12-04 [colin] 3.1.0cvs55
+
+ * src/mainwindow.c
+ * src/mainwindow.h
+ * src/prefs_common.c
+ * src/prefs_common.h
+ * src/prefs_receive.c
+ MAEMO: Fix bug 1199, 'Tie into LED for new mail alert'
+
2007-12-04 [wwp] 3.1.0cvs54
* src/prefs_other.c
( cvs diff -u -r 1.101.2.46 -r 1.101.2.47 src/news.c; cvs diff -u -r 1.150.2.106 -r 1.150.2.107 src/procmsg.c; cvs diff -u -r 1.25.2.24 -r 1.25.2.25 tools/Makefile.am; cvs diff -u -r -1.1.14.4 -r -1.1.14.5 tools/README.sylprint; cvs diff -u -r -1.2.14.3 -r -1.2.14.4 tools/sylprint.pl; cvs diff -u -r -1.1.14.2 -r -1.1.14.3 tools/sylprint.rc; ) > 3.1.0cvs52.patchset
( cvs diff -u -r 1.1.2.7 -r 1.1.2.8 src/addrduplicates.c; cvs diff -u -r 1.1.2.2 -r 1.1.2.3 src/addrduplicates.h; ) > 3.1.0cvs53.patchset
( cvs diff -u -r 1.1.2.25 -r 1.1.2.26 src/prefs_other.c; ) > 3.1.0cvs54.patchset
+( cvs diff -u -r 1.274.2.223 -r 1.274.2.224 src/mainwindow.c; cvs diff -u -r 1.39.2.42 -r 1.39.2.43 src/mainwindow.h; cvs diff -u -r 1.204.2.157 -r 1.204.2.158 src/prefs_common.c; cvs diff -u -r 1.103.2.101 -r 1.103.2.102 src/prefs_common.h; cvs diff -u -r 1.1.2.21 -r 1.1.2.22 src/prefs_receive.c; ) > 3.1.0cvs55.patchset
MICRO_VERSION=0
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=54
+EXTRA_VERSION=55
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
#undef BREAK_ON_MODIFIER_KEY
+#ifdef MAEMO
+void mainwindow_maemo_led_set(gboolean state) {
+ static gint last_state = -1;
+ if (last_state == state)
+ return;
+ last_state = (gint)state;
+ if (prefs_common.maemo_show_led) {
+ if(state) {
+ execute_command_line("/usr/bin/dbus-send --system --type=method_call "
+ "--dest=com.nokia.mce "
+ "/com/nokia/mce/request com.nokia.mce.request.req_led_pattern_activate "
+ "string:PatternCommunicationEvent", TRUE);
+ } else {
+ execute_command_line("/usr/bin/dbus-send --system --type=method_call "
+ "--dest=com.nokia.mce "
+ "/com/nokia/mce/request com.nokia.mce.request.req_led_pattern_deactivate "
+ "string:PatternCommunicationEvent", TRUE);
+ }
+ }
+}
+
+static void led_update(FolderItem *removed_item)
+{
+ guint new, unread, unreadmarked, marked, total;
+
+ folder_count_total_msgs(&new, &unread, &unreadmarked, &marked, &total);
+ if (removed_item) {
+ total -= removed_item->total_msgs;
+ new -= removed_item->new_msgs;
+ unread -= removed_item->unread_msgs;
+ }
+
+ if (new > 0)
+ mainwindow_maemo_led_set(TRUE);
+ else
+ mainwindow_maemo_led_set(FALSE);
+}
+
+static gboolean maemo_folder_item_update_hook(gpointer source, gpointer data)
+{
+ led_update(NULL);
+
+ return FALSE;
+}
+
+static gboolean maemo_folder_update_hook(gpointer source, gpointer data)
+{
+ FolderUpdateData *hookdata;
+ hookdata = source;
+ if (hookdata->update_flags & FOLDER_REMOVE_FOLDERITEM)
+ led_update(hookdata->item);
+ else
+ led_update(NULL);
+
+ return FALSE;
+}
+
+static void main_window_install_maemo_hooks(MainWindow *mainwin)
+{
+ gint maemo_item_hook_id, maemo_folder_hook_id;
+
+ maemo_item_hook_id = hooks_register_hook (FOLDER_ITEM_UPDATE_HOOKLIST, maemo_folder_item_update_hook, NULL);
+ if (maemo_item_hook_id == -1) {
+ goto err_out_item;
+ }
+
+ maemo_folder_hook_id = hooks_register_hook (FOLDER_UPDATE_HOOKLIST, maemo_folder_update_hook, NULL);
+ if (maemo_folder_hook_id == -1) {
+ goto err_out_folder;
+ }
+
+ return;
+
+err_out_folder:
+ hooks_unregister_hook(FOLDER_ITEM_UPDATE_HOOKLIST, maemo_item_hook_id);
+err_out_item:
+ return;
+}
+#endif
+
MainWindow *main_window_create()
{
MainWindow *mainwin;
mainwindow_colorlabel_menu_create(mainwin, FALSE);
mainwindow_tags_menu_create(mainwin, FALSE);
-
+
+#ifdef MAEMO
+ main_window_install_maemo_hooks(mainwin);
+#endif
return mainwin;
}
/* re-create tags submenu */
menu = GTK_MENU_SHELL(mainwin->tags_menu);
- g_return_if_fail(menu != NULL);
+ g_return_val_if_fail(menu != NULL, FALSE);
/* clear items. get item pointers. */
for (cur = menu->children; cur != NULL && cur->data != NULL; cur = cur->next) {
gboolean maemo_mainwindow_is_fullscreen (GtkWidget *widget);
void maemo_window_full_screen_if_needed (GtkWindow *window);
void maemo_connect_key_press_to_mainwindow (GtkWindow *window);
+void mainwindow_maemo_led_set(gboolean state);
#endif
#endif /* __MAINWINDOW_H__ */
{"newmail_notify_cmd", "", &SPECIFIC_PREFS.newmail_notify_cmd, P_STRING,
NULL, NULL, NULL},
#ifdef MAEMO
+ {"maemo_show_led", "TRUE", &prefs_common.maemo_show_led, P_BOOL,
+ NULL, NULL, NULL},
{"maemo_play_sound", "FALSE", &prefs_common.maemo_play_sound, P_BOOL,
NULL, NULL, NULL},
{"maemo_show_banner", "FALSE", &prefs_common.maemo_show_banner, P_BOOL,
gboolean newmail_notify_manu;
gchar *newmail_notify_cmd;
#ifdef MAEMO
+ gboolean maemo_show_led;
gboolean maemo_play_sound;
gboolean maemo_show_banner;
#endif
GtkWidget *entry_newmail_notify_cmd;
GtkWidget *hbox_newmail_notify;
#else
+ GtkWidget *checkbtn_maemo_show_led;
GtkWidget *checkbtn_maemo_play_sound;
GtkWidget *checkbtn_maemo_show_banner;
#endif
GtkWidget *entry_newmail_notify_cmd;
GtkWidget *label_newmail_notify_cmd;
#else
+ GtkWidget *checkbtn_maemo_show_led;
GtkWidget *checkbtn_maemo_play_sound;
GtkWidget *checkbtn_maemo_show_banner;
#endif
gtk_entry_set_text(GTK_ENTRY(entry_newmail_notify_cmd),
prefs_common.newmail_notify_cmd);
#else
+ PACK_CHECK_BUTTON (vbox2, checkbtn_maemo_show_led, _("Toggle LED blinking"));
PACK_CHECK_BUTTON (vbox2, checkbtn_maemo_play_sound, _("Play sound"));
PACK_CHECK_BUTTON (vbox2, checkbtn_maemo_show_banner,
_("Show info banner"));
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_maemo_show_led),
+ prefs_common.maemo_show_led);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_maemo_play_sound),
prefs_common.maemo_play_sound);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(checkbtn_maemo_show_banner),
prefs_receive->entry_newmail_notify_cmd = entry_newmail_notify_cmd;
prefs_receive->hbox_newmail_notify = hbox_newmail_notify;
#else
+ prefs_receive->checkbtn_maemo_show_led = checkbtn_maemo_show_led;
prefs_receive->checkbtn_maemo_play_sound = checkbtn_maemo_play_sound;
prefs_receive->checkbtn_maemo_show_banner = checkbtn_maemo_show_banner;
#endif
prefs_common.newmail_notify_manu = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(page->checkbtn_newmail_manu));
#else
+ prefs_common.maemo_show_led = TRUE;
+ if (!gtk_toggle_button_get_active(
+ GTK_TOGGLE_BUTTON(page->checkbtn_maemo_show_led))) {
+ mainwindow_maemo_led_set(FALSE);
+ prefs_common.maemo_show_led = FALSE;
+ }
prefs_common.maemo_play_sound = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(page->checkbtn_maemo_play_sound));
prefs_common.maemo_show_banner = gtk_toggle_button_get_active(