Changeset 4265
- Timestamp:
- 03/28/08 16:29:14 (5 years ago)
- Location:
- trunk/src/target/OM-2007.2/applications/openmoko-messages2
- Files:
-
- 6 edited
-
ChangeLog (modified) (1 diff)
-
src/sms-compose.c (modified) (3 diffs)
-
src/sms-contacts.c (modified) (7 diffs)
-
src/sms-main.c (modified) (4 diffs)
-
src/sms-notes.c (modified) (5 diffs)
-
src/sms.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/target/OM-2007.2/applications/openmoko-messages2/ChangeLog
r4259 r4265 1 2008-03-28 Thomas Wood <thomas@openedhand.com> 2 3 * src/sms-compose.c: (page_shown), (sms_compose_page_new): 4 * src/sms-contacts.c: (contacts_changed_cb), (contacts_removed_cb), 5 (contacts_seq_complete_cb), (free_iter_slice), 6 (nophoto_filter_func), (contacts_iter_compare_func), 7 (contacts_visible_func), (malloc_list_free), 8 (selection_changed_cb), (sms_contacts_update_delete_all), 9 (sms_contacts_page_new): 10 * src/sms-main.c: (notebook_add_page_with_icon), (main): 11 * src/sms-notes.c: (page_shown), (page_hidden), 12 (sms_notes_page_new): 13 * src/sms.h: 14 15 Re-arrange toolbars to add dial button (bug 1306). 16 1 17 2008-03-27 Erin Yueh <erin_yueh@openmoko.com> 2 18 -
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-compose.c
r4259 r4265 32 32 GdkPixbuf *photo; 33 33 gchar *string; 34 35 /* Make delete(-all) buttons insensitive */ 36 /* TODO: Replace these with more useful buttons? */ 37 gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button), FALSE); 38 gtk_widget_set_sensitive (GTK_WIDGET (data->delete_all_button), FALSE); 39 40 if (!data->sms_proxy) 41 gtk_widget_set_sensitive (GTK_WIDGET (data->new_button), FALSE); 34 42 35 gtk_tool_button_set_stock_id (GTK_TOOL_BUTTON (data->new_button), 43 36 MOKO_STOCK_MAIL_SEND); … … 239 232 sms_compose_page_new (SmsData *data) 240 233 { 241 GtkWidget *vbox, *frame, *contact_table, *align ;234 GtkWidget *vbox, *frame, *contact_table, *align, *toolbar; 242 235 243 236 /* Connect to new/send button clicked */ 244 237 g_signal_connect (data->new_button, "clicked", 245 238 G_CALLBACK (send_clicked_cb), data); 239 240 /* Create toolbar */ 241 toolbar = gtk_toolbar_new (); 242 243 /* Send button */ 244 data->new_button = gtk_tool_button_new_from_stock (MOKO_STOCK_MAIL_SEND); 245 gtk_tool_item_set_expand (data->new_button, TRUE); 246 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data->new_button, -1); 247 g_signal_connect (data->new_button, "clicked", 248 G_CALLBACK (send_clicked_cb), &data); 246 249 247 250 /* Create contact info display/number entry */ … … 288 291 /* Pack widgets */ 289 292 vbox = gtk_vbox_new (FALSE, 0); 293 gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, TRUE, 0); 290 294 gtk_box_pack_start (GTK_BOX (vbox), contact_table, FALSE, TRUE, 0); 291 295 gtk_box_pack_start (GTK_BOX (vbox), frame, TRUE, TRUE, 0); -
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-contacts.c
r3918 r4265 28 28 #include <string.h> 29 29 30 31 #define PK_NAMESPACE "org.openmoko.PhoneKit" 32 #define DIALER_NAMESPACE "org.openmoko.PhoneKit.Dialer" 33 #define DIALER_OBJECT "/org/openmoko/PhoneKit/Dialer" 34 35 GtkWidget *treeview; 36 37 30 38 static const gchar *clear_numbers_uid; 31 39 32 static gboolean hidden = FALSE;33 34 40 static void selection_changed_cb (GtkTreeSelection *selection, SmsData *data); 35 36 static void 37 page_shown (SmsData *data) 38 { 39 GtkTreeSelection *selection; 40 41 /* Update delete/delete-all buttons */ 42 sms_contacts_update_delete_all (data); 43 selection = gtk_tree_view_get_selection ( 44 GTK_TREE_VIEW (data->contacts_treeview)); 45 selection_changed_cb (selection, data); 46 } 47 48 static void 49 page_hidden (SmsData *data) 50 { 51 } 52 53 static void 54 notify_visible_cb (GObject *gobject, GParamSpec *arg1, SmsData *data) 55 { 56 if ((!hidden) && (!GTK_WIDGET_VISIBLE (gobject))) { 57 hidden = TRUE; 58 page_hidden (data); 59 } 60 } 61 62 static gboolean 63 visibility_notify_event_cb (GtkWidget *widget, GdkEventVisibility *event, 64 SmsData *data) 65 { 66 if (((event->state == GDK_VISIBILITY_PARTIAL) || 67 (event->state == GDK_VISIBILITY_UNOBSCURED)) && (hidden)) { 68 hidden = FALSE; 69 page_shown (data); 70 } 71 72 return FALSE; 73 } 74 75 static void 76 unmap_cb (GtkWidget *widget, SmsData *data) 77 { 78 if (!hidden) { 79 hidden = TRUE; 80 page_hidden (data); 81 } 82 } 41 static void dial_clicked_cb (GtkWidget *button, SmsData *data); 42 43 static void 44 new_clicked_cb (GtkToolButton *button, SmsData *data) 45 { 46 if (gtk_notebook_get_current_page (GTK_NOTEBOOK (data->notebook)) == 47 SMS_PAGE_COMPOSE) return; 48 49 gtk_text_buffer_set_text (gtk_text_view_get_buffer ( 50 GTK_TEXT_VIEW (data->sms_textview)), "", -1); 51 52 gtk_notebook_set_current_page ( 53 GTK_NOTEBOOK (data->notebook), SMS_PAGE_COMPOSE); 54 } 55 56 void 57 openmoko_contacts_util_dial_number (const gchar *number) 58 { 59 DBusGConnection *conn; 60 DBusGProxy *proxy; 61 GError *err = NULL; 62 63 conn = dbus_g_bus_get (DBUS_BUS_SESSION, &err); 64 if (conn == NULL) 65 { 66 g_warning ("Failed to make DBus connection: %s", err->message); 67 g_error_free (err); 68 return; 69 } 70 71 proxy = dbus_g_proxy_new_for_name (conn, 72 PK_NAMESPACE, 73 DIALER_OBJECT, 74 DIALER_NAMESPACE); 75 if (proxy == NULL) 76 { 77 g_warning ("Unable to get dialer object"); 78 return; 79 } 80 81 err = NULL; 82 dbus_g_proxy_call (proxy, "Dial", &err, 83 G_TYPE_STRING, number, 84 G_TYPE_INVALID, G_TYPE_INVALID); 85 86 if (err) 87 { 88 g_warning (err->message); 89 g_error_free (err); 90 } 91 } 92 93 94 /* hito_vcard_attribute_get_type() taken from hito-vcard-util.c 95 * Copyright 2007 OpenedHand Ltd, licensed under GPL */ 96 gchar* 97 hito_vcard_attribute_get_type (EVCardAttribute *attr) 98 { 99 GList *list, *l; 100 gchar *result = NULL; 101 list = e_vcard_attribute_get_param (attr, "TYPE"); 102 103 for (l = list; l; l = g_list_next (l)) 104 { 105 if (result) 106 { 107 gchar *old_result = result; 108 result = g_strconcat (l->data, ";", old_result, NULL); 109 g_free (old_result); 110 } 111 else 112 { 113 result = g_strdup (l->data); 114 } 115 } 116 117 return result; 118 } 119 120 121 static void 122 on_dial_number_clicked (GtkWidget *eb, GdkEventButton *event, GtkDialog *dialog) 123 { 124 EVCardAttribute *att; 125 const gchar *number; 126 127 att = g_object_get_data (G_OBJECT (eb), "contact"); 128 number = hito_vcard_attribute_get_value_string (att); 129 openmoko_contacts_util_dial_number (number); 130 131 gtk_dialog_response (dialog, GTK_RESPONSE_CANCEL); 132 } 133 134 static void 135 dial_clicked_cb (GtkWidget *button, SmsData *data) 136 { 137 GList *numbers; 138 GList *n; 139 gint num_tels = 0; 140 GError *err = NULL; 141 EContact *contact; 142 143 g_return_if_fail (GTK_IS_TREE_VIEW (treeview)); 144 145 contact = sms_get_selected_contact (data); 146 147 if (err) 148 { 149 g_warning ("Could not find contact"); 150 return; 151 } 152 153 numbers = hito_vcard_get_named_attributes (E_VCARD (contact), EVC_TEL); 154 num_tels = g_list_length (numbers); 155 156 if (num_tels < 1) 157 { 158 g_print ("Dial: This contact does not have any numbers\n"); 159 return; 160 } 161 else if (num_tels == 1) 162 { 163 /* dial */ 164 openmoko_contacts_util_dial_number ( 165 hito_vcard_attribute_get_value_string (numbers->data)); 166 } 167 else 168 { 169 /* Make a dialog with a list of numbers, which are one-click dialling */ 170 /* dial on click, and then close the window */ 171 GtkWidget *dialog, *vbox, *hbox, *image, *label; 172 173 dialog = gtk_dialog_new_with_buttons ("Please choose a number to call", 174 GTK_WINDOW (data->window), 175 GTK_DIALOG_DESTROY_WITH_PARENT, 176 GTK_STOCK_CANCEL, 177 GTK_RESPONSE_CANCEL, 178 NULL); 179 gtk_container_set_border_width (GTK_CONTAINER (dialog), 12); 180 vbox = gtk_vbox_new (FALSE, 8); 181 gtk_box_pack_start (GTK_BOX (GTK_DIALOG(dialog)->vbox), vbox, 182 FALSE, FALSE, 12); 183 184 GtkSizeGroup *size_group; 185 size_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH); 186 for (n = numbers; n; n = n->next) 187 { 188 GtkWidget *button = gtk_event_box_new (); 189 gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 8); 190 191 hbox = gtk_hbox_new (FALSE, 6); 192 gtk_container_add (GTK_CONTAINER (button), hbox); 193 194 label = gtk_label_new (hito_vcard_attribute_get_type (n->data)); 195 gtk_size_group_add_widget (size_group, label); 196 gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); 197 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); 198 199 image = gtk_image_new_from_stock (MOKO_STOCK_CONTACT_PHONE, 200 GTK_ICON_SIZE_BUTTON); 201 gtk_box_pack_start (GTK_BOX (hbox), image, FALSE, FALSE, 0); 202 203 label = gtk_label_new (hito_vcard_attribute_get_value_string (n->data)); 204 gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); 205 206 g_signal_connect (button, "button-release-event", 207 G_CALLBACK (on_dial_number_clicked), (gpointer)dialog); 208 g_object_set_data (G_OBJECT (button), "contact", n->data); 209 } 210 g_object_unref (size_group); 211 gtk_widget_show_all (dialog); 212 gint res = gtk_dialog_run (GTK_DIALOG (dialog)); 213 res++; 214 gtk_widget_destroy (dialog); 215 } 216 } 217 218 83 219 84 220 static void … … 376 512 } 377 513 378 static void379 delete_clicked_cb (GtkToolButton *button, SmsData *data)380 {381 if (hidden) return;382 383 if (sms_delete_selected_contact_messages (data)) {384 gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button),385 FALSE);386 }387 }388 389 static void390 delete_all_added_cb (JanaStoreView *store_view, GList *components,391 SmsData *data)392 {393 for (; components; components = components->next) {394 JanaComponent *comp = JANA_COMPONENT (components->data);395 jana_store_remove_component (396 jana_store_view_get_store (store_view), comp);397 }398 }399 400 static void401 delete_all_progress_cb (JanaStoreView *store_view, gint percent,402 SmsData *data)403 {404 if (percent == 100) g_object_unref (store_view);405 }406 407 static void408 delete_all_clicked_cb (GtkToolButton *button, SmsData *data)409 {410 JanaStoreView *notes_view;411 GtkWidget *dialog;412 gint response;413 414 if (hidden) return;415 416 dialog = gtk_message_dialog_new_with_markup (GTK_WINDOW (data->window),417 GTK_DIALOG_MODAL,418 GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE,419 "Delete <b>all</b> messages?");420 gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL,421 GTK_RESPONSE_CANCEL, GTK_STOCK_DELETE, GTK_RESPONSE_YES, NULL);422 423 response = gtk_dialog_run (GTK_DIALOG (dialog));424 gtk_widget_destroy (dialog);425 if (response != GTK_RESPONSE_YES) return;426 427 /* Delete all messages */428 notes_view = jana_store_get_view (data->notes);429 g_signal_connect (notes_view, "added",430 G_CALLBACK (delete_all_added_cb), data);431 g_signal_connect (notes_view, "progress",432 G_CALLBACK (delete_all_progress_cb), data);433 jana_store_view_start (notes_view);434 }435 514 436 515 static void … … 579 658 sms_contacts_update_delete_all (SmsData *data) 580 659 { 660 581 661 if (gtk_notebook_get_current_page (GTK_NOTEBOOK (data->notebook)) == 582 662 SMS_PAGE_CONTACTS) { … … 595 675 { 596 676 EBookQuery *qrys[(E_CONTACT_LAST_PHONE_ID-E_CONTACT_FIRST_PHONE_ID)+1]; 597 GtkWidget *contacts_combo, *vbox ;677 GtkWidget *contacts_combo, *vbox, *toolbar; 598 678 GtkTreeSelection *selection; 599 679 GtkCellRenderer *renderer; … … 704 784 705 785 /* Create tree view */ 706 data->contacts_treeview = gtk_tree_view_new_with_model (786 treeview = data->contacts_treeview = gtk_tree_view_new_with_model ( 707 787 data->contacts_filter); 708 788 gtk_tree_view_set_rules_hint (GTK_TREE_VIEW ( … … 735 815 data->contacts_treeview); 736 816 817 /* Create toolbar */ 818 toolbar = gtk_toolbar_new (); 819 820 /* New button */ 821 data->new_button = gtk_tool_button_new_from_stock (MOKO_STOCK_SMS_NEW); 822 gtk_tool_item_set_expand (data->new_button, TRUE); 823 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data->new_button, -1); 824 g_signal_connect (data->new_button, "clicked", 825 G_CALLBACK (new_clicked_cb), data); 826 827 /* Dial button */ 828 data->dial_button = gtk_tool_button_new_from_stock (MOKO_STOCK_CALL_DIAL); 829 gtk_tool_item_set_expand (data->dial_button, TRUE); 830 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data->dial_button, -1); 831 g_signal_connect (data->dial_button, "clicked", 832 G_CALLBACK (dial_clicked_cb), data); 833 737 834 /* Pack widgets into vbox and return */ 738 835 vbox = gtk_vbox_new (FALSE, 0); 836 gtk_box_pack_start (GTK_BOX (vbox), toolbar, 837 FALSE, TRUE, 0); 739 838 gtk_box_pack_start (GTK_BOX (vbox), data->contacts_search, 740 839 FALSE, TRUE, 0); … … 754 853 e_book_view_start (view); 755 854 756 /* Connect to toolbar delete buttons */757 g_signal_connect (data->delete_button, "clicked",758 G_CALLBACK (delete_clicked_cb), data);759 g_signal_connect (data->delete_all_button, "clicked",760 G_CALLBACK (delete_all_clicked_cb), data);761 762 /* Add events for detecting whether the page has been hidden/shown */763 gtk_widget_add_events (data->contacts_treeview,764 GDK_VISIBILITY_NOTIFY_MASK);765 g_signal_connect (data->contacts_treeview, "visibility-notify-event",766 G_CALLBACK (visibility_notify_event_cb), data);767 g_signal_connect (data->contacts_treeview, "notify::visible",768 G_CALLBACK (notify_visible_cb), data);769 g_signal_connect (vbox, "unmap",770 G_CALLBACK (unmap_cb), data);771 772 855 return vbox; 773 856 } -
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-main.c
r3868 r4265 47 47 } 48 48 49 static void50 new_clicked_cb (GtkToolButton *button, SmsData *data)51 {52 if (gtk_notebook_get_current_page (GTK_NOTEBOOK (data->notebook)) ==53 SMS_PAGE_COMPOSE) return;54 55 gtk_text_buffer_set_text (gtk_text_view_get_buffer (56 GTK_TEXT_VIEW (data->sms_textview)), "", -1);57 58 gtk_notebook_set_current_page (59 GTK_NOTEBOOK (data->notebook), SMS_PAGE_COMPOSE);60 }61 62 49 int 63 50 main (int argc, char **argv) … … 104 91 g_signal_connect (data.window, "delete-event", 105 92 G_CALLBACK (gtk_main_quit), NULL); 106 107 /* Create toolbar */ 108 toolbar = gtk_toolbar_new (); 109 110 /* New button */ 111 data.new_button = gtk_tool_button_new_from_stock (MOKO_STOCK_SMS_NEW); 112 gtk_tool_item_set_expand (data.new_button, TRUE); 113 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data.new_button, 0); 114 g_signal_connect (data.new_button, "clicked", 115 G_CALLBACK (new_clicked_cb), &data); 116 117 /* Forward button */ 118 data.forward_button = gtk_tool_button_new_from_stock ( 119 MOKO_STOCK_MAIL_FORWARD); 120 gtk_tool_item_set_expand (data.forward_button, TRUE); 121 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data.forward_button, 1); 122 123 /* Delete all button */ 124 data.delete_all_button = gtk_tool_button_new_from_stock ( 125 MOKO_STOCK_FOLDER_DELETE); 126 gtk_tool_item_set_expand (data.delete_all_button, TRUE); 127 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data.delete_all_button, 2); 128 gtk_widget_set_sensitive (GTK_WIDGET (data.delete_all_button), FALSE); 129 130 /* Delete button */ 131 data.delete_button = gtk_tool_button_new_from_stock ( 132 GTK_STOCK_DELETE); 133 gtk_tool_item_set_expand (data.delete_button, TRUE); 134 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data.delete_button, 3); 135 gtk_widget_set_sensitive (GTK_WIDGET (data.delete_button), FALSE); 93 136 94 137 95 /* Create notebook */ … … 153 111 /* Pack and show */ 154 112 vbox = gtk_vbox_new (FALSE, 0); 155 gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, TRUE, 0);156 113 gtk_box_pack_start (GTK_BOX (vbox), data.notebook, TRUE, TRUE, 0); 157 114 gtk_container_add (GTK_CONTAINER (data.window), vbox); … … 169 126 170 127 gtk_widget_show_all (data.window); 171 gtk_widget_hide (GTK_WIDGET (data.forward_button));172 128 173 129 gtk_main (); -
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms-notes.c
r4182 r4265 179 179 gboolean found_match = FALSE; 180 180 EContact *contact = NULL; 181 182 /* Show forward button */ 183 gtk_widget_show (GTK_WIDGET (data->forward_button)); 184 185 gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button), FALSE); 186 gtk_widget_set_sensitive (GTK_WIDGET (data->forward_button), FALSE); 187 181 188 182 if (!open) return; 189 183 … … 283 277 { 284 278 GtkAdjustment *hadjust, *vadjust; 285 286 /* Hide forward button */287 gtk_widget_hide (GTK_WIDGET (data->forward_button));288 279 289 280 if (data->notes_scroll_idle) g_source_remove (data->notes_scroll_idle); … … 812 803 sms_notes_page_new (SmsData *data) 813 804 { 814 GtkWidget *scroll, *vbox, *notes_combo ;805 GtkWidget *scroll, *vbox, *notes_combo, *toolbar; 815 806 GtkCellRenderer *renderer; 816 807 GHashTable *colours_hash; … … 879 870 G_CALLBACK (selection_changed_cb), data); 880 871 872 /* create toolbar */ 873 toolbar = gtk_toolbar_new (); 874 875 /* Forward button */ 876 data->forward_button = gtk_tool_button_new_from_stock ( 877 MOKO_STOCK_MAIL_FORWARD); 878 gtk_tool_item_set_expand (data->forward_button, TRUE); 879 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data->forward_button, -1); 880 881 /* Delete all button */ 882 data->delete_all_button = gtk_tool_button_new_from_stock ( 883 MOKO_STOCK_FOLDER_DELETE); 884 gtk_tool_item_set_expand (data->delete_all_button, TRUE); 885 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data->delete_all_button, -1); 886 gtk_widget_set_sensitive (GTK_WIDGET (data->delete_all_button), FALSE); 887 888 /* Delete button */ 889 data->delete_button = gtk_tool_button_new_from_stock ( 890 GTK_STOCK_DELETE); 891 gtk_tool_item_set_expand (data->delete_button, TRUE); 892 gtk_toolbar_insert (GTK_TOOLBAR (toolbar), data->delete_button, -1); 893 gtk_widget_set_sensitive (GTK_WIDGET (data->delete_button), FALSE); 894 881 895 /* Create search bar */ 882 896 notes_combo = gtk_combo_box_new_text (); … … 900 914 901 915 vbox = gtk_vbox_new (FALSE, 0); 916 gtk_box_pack_start (GTK_BOX (vbox), toolbar, FALSE, TRUE, 0); 902 917 gtk_box_pack_start (GTK_BOX (vbox), data->notes_search, FALSE, TRUE, 0); 903 918 gtk_box_pack_start (GTK_BOX (vbox), scroll, TRUE, TRUE, 0); -
trunk/src/target/OM-2007.2/applications/openmoko-messages2/src/sms.h
r3918 r4265 27 27 #include <dbus/dbus-glib-bindings.h> 28 28 #include <libebook/e-book.h> 29 #include <libmokoui2/moko-stock.h> 29 30 30 31 typedef struct { … … 58 59 GtkWidget *notebook; 59 60 GtkToolItem *new_button; 61 GtkToolItem *dial_button; 60 62 GtkToolItem *forward_button; 61 63 GtkToolItem *delete_all_button;
Note: See TracChangeset
for help on using the changeset viewer.
