2 * This file is a part of hildon
4 * Copyright (C) 2005, 2006 Nokia Corporation, all rights reserved.
6 * Contact: Rodrigo Novo <rodrigo.novo@nokia.com>
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; version 2.1 of
11 * the License, or (at your option) any later version.
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
27 * @short_description: A widget to ask confirmation from the user.
29 * #HildonNote is a convenient way to prompt users for a small amount of
30 * input. A simple note contains an information text and, in case of
31 * confirmation notes, it shows buttons to confirm or cancel. It can also
32 * include a #GtkProgressBar.
34 * This widget provides convenient functions to create either
35 * information notes, confirmation notes or cancel notes, which are
36 * useful to show the progress of a requested task allowing the user
39 * To create information notes you can use
40 * hildon_note_new_information(). hildon_note_new_confirmation()
41 * creates a note with a text and two buttons to confirm or
42 * cancel. Note that it is possible to create a confirmation note with
43 * customized buttons by using
44 * hildon_note_new_confirmation_add_buttons().
46 * To create a note with a text, a progress bar and cancel button,
47 * hildon_note_new_cancel_with_progress_bar() can be used.
50 * <title>HildonNote example</title>
54 * show_confirmation_note (GtkWindow *parent)
58 * note = hildon_note_new_confirmation (parent, "Confirmation message...");
60 * retcode = gtk_dialog_run (GTK_DIALOG (note));
61 * gtk_widget_destroy (note);
63 * if (retcode == GTK_RESPONSE_OK) {
64 * g_debug ("User pressed 'OK' button'");
67 * g_debug ("User pressed 'Cancel' button");
83 #include <X11/Xatom.h>
86 #undef HILDON_DISABLE_DEPRECATED
88 #include "hildon-note.h"
89 #include "hildon-defines.h"
90 #include "hildon-sound.h"
91 #include "hildon-banner.h"
92 #include "hildon-enum-types.h"
93 #include "hildon-note-private.h"
95 #define HILDON_INFORMATION_NOTE_MIN_HEIGHT 140
97 #define HILDON_INFORMATION_NOTE_MARGIN 100
99 #define CONFIRMATION_SOUND_PATH \
100 "/usr/share/sounds/ui-confirmation_note.wav"
102 #define INFORMATION_SOUND_PATH \
103 "/usr/share/sounds/ui-information_note.wav"
105 #define _(String) dgettext("hildon-libs", String)
108 hildon_note_class_init (HildonNoteClass *class);
111 hildon_note_init (HildonNote *dialog);
114 hildon_note_rebuild (HildonNote *note);
117 hildon_note_rename (HildonNote *note);
120 hildon_note_finalize (GObject *obj_self);
123 hildon_note_realize (GtkWidget *widget);
126 hildon_note_unrealize (GtkWidget *widget);
129 hildon_note_size_request (GtkWidget *note,
130 GtkRequisition *req);
133 label_size_request (GtkWidget *label,
138 hildon_note_set_property (GObject *object,
144 hildon_note_get_property (GObject *object,
150 on_show_cb (GtkWidget *widget,
153 sound_handling (gpointer data);
156 unpack_widget (GtkWidget *widget);
161 PROP_HILDON_NOTE_TYPE,
162 PROP_HILDON_NOTE_DESCRIPTION,
163 PROP_HILDON_NOTE_ICON,
164 PROP_HILDON_NOTE_PROGRESSBAR,
165 PROP_HILDON_NOTE_STOCK_ICON
168 static GtkDialogClass* parent_class;
171 event_box_press_event (GtkEventBox *event_box,
172 GdkEventButton *event,
175 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
177 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
178 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
179 gtk_dialog_response (note, GTK_RESPONSE_DELETE_EVENT);
187 hildon_note_set_property (GObject *object,
192 HildonNote *note = HILDON_NOTE (object);
193 HildonNotePrivate *priv;
196 priv = HILDON_NOTE_GET_PRIVATE (note);
201 case PROP_HILDON_NOTE_TYPE:
202 priv->note_n = g_value_get_enum (value);
203 hildon_note_rename (note);
204 hildon_note_rebuild (note);
207 case PROP_HILDON_NOTE_DESCRIPTION:
208 if (priv->original_description)
209 g_free (priv->original_description);
210 priv->original_description = g_value_dup_string (value);
212 gtk_label_set_text (GTK_LABEL (priv->label), priv->original_description);
213 /* FIXME Is the "original_description" used anywhere? */
217 case PROP_HILDON_NOTE_ICON:
221 priv->icon = g_value_dup_string (value);
224 case PROP_HILDON_NOTE_STOCK_ICON:
225 if (priv->stock_icon) {
226 g_free (priv->stock_icon);
228 priv->stock_icon = g_value_dup_string (value);
231 case PROP_HILDON_NOTE_PROGRESSBAR:
232 widget = g_value_get_object (value);
233 if (widget != priv->progressbar)
235 if (priv->progressbar)
236 g_object_unref (priv->progressbar);
238 priv->progressbar = widget;
242 g_object_ref (widget);
243 gtk_object_sink (GTK_OBJECT (widget));
246 hildon_note_rebuild (note);
251 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
257 hildon_note_get_property (GObject *object,
262 HildonNote *note = HILDON_NOTE (object);
263 HildonNotePrivate *priv;
265 priv = HILDON_NOTE_GET_PRIVATE (note);
269 case PROP_HILDON_NOTE_TYPE:
270 g_value_set_enum (value, priv->note_n);
273 case PROP_HILDON_NOTE_DESCRIPTION:
274 g_value_set_string (value, priv->original_description);
277 case PROP_HILDON_NOTE_ICON:
278 g_value_set_string (value, priv->icon);
281 case PROP_HILDON_NOTE_STOCK_ICON:
282 g_value_set_string (value, priv->stock_icon);
285 case PROP_HILDON_NOTE_PROGRESSBAR:
286 g_value_set_object (value, priv->progressbar);
290 G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
296 * hildon_note_get_type:
298 * Returns GType for HildonNote.
300 * Returns: HildonNote type
303 hildon_note_get_type (void)
305 static GType dialog_type = 0;
308 static const GTypeInfo dialog_info = {
309 sizeof(HildonNoteClass),
310 NULL, /* base_init */
311 NULL, /* base_finalize */
312 (GClassInitFunc) hildon_note_class_init,
313 NULL, /* class_finalize */
314 NULL, /* class_data */
317 (GInstanceInitFunc) hildon_note_init
319 dialog_type = g_type_register_static (GTK_TYPE_DIALOG,
327 hildon_note_class_init (HildonNoteClass *class)
329 GObjectClass *object_class = G_OBJECT_CLASS (class);
330 GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
332 /* set the global parent_class */
333 parent_class = g_type_class_peek_parent (class);
335 g_type_class_add_private (class, sizeof (HildonNotePrivate));
337 object_class->finalize = hildon_note_finalize;
338 object_class->set_property = hildon_note_set_property;
339 object_class->get_property = hildon_note_get_property;
340 widget_class->realize = hildon_note_realize;
341 widget_class->unrealize = hildon_note_unrealize;
342 widget_class->size_request = hildon_note_size_request;
347 * The type of the #HildonNote, defining its contents, behavior, and
350 g_object_class_install_property (object_class,
351 PROP_HILDON_NOTE_TYPE,
352 g_param_spec_enum ("note-type",
354 "The type of the note dialog",
355 hildon_note_type_get_type (),
356 HILDON_NOTE_TYPE_CONFIRMATION,
357 G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
360 * HildonNote:description:
362 * The text that appears in the #HildonNote.
364 g_object_class_install_property (object_class,
365 PROP_HILDON_NOTE_DESCRIPTION,
366 g_param_spec_string ("description",
368 "The text that appears in the note dialog",
377 * Deprecated: Since 2.2
379 g_object_class_install_property (object_class,
380 PROP_HILDON_NOTE_ICON,
381 g_param_spec_string ("icon",
383 "The name of the icon that appears in the note dialog",
388 * HildonNote:stock-icon:
390 * Stock icon name for the note.
392 * Deprecated: Since 2.2
394 g_object_class_install_property (object_class,
395 PROP_HILDON_NOTE_STOCK_ICON,
396 g_param_spec_string ("stock-icon",
398 "The stock name of the icon that appears in the note dialog",
403 * HildonNote:progressbar:
405 * If set, a #GtkProgressBar visible in the note.
407 g_object_class_install_property (object_class,
408 PROP_HILDON_NOTE_PROGRESSBAR,
409 g_param_spec_object ("progressbar",
410 "Progressbar widget",
411 "The progressbar that appears in the note dialog",
412 GTK_TYPE_PROGRESS_BAR,
417 hildon_note_init (HildonNote *dialog)
419 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (dialog);
422 priv->label = gtk_label_new (NULL);
423 gtk_label_set_line_wrap (GTK_LABEL (priv->label), TRUE);
424 gtk_label_set_justify (GTK_LABEL (priv->label), GTK_JUSTIFY_LEFT);
426 priv->event_box = gtk_event_box_new ();
428 priv->stock_icon = NULL;
429 priv->idle_handler = 0;
431 gtk_event_box_set_visible_window (GTK_EVENT_BOX (priv->event_box), FALSE);
432 gtk_event_box_set_above_child (GTK_EVENT_BOX (priv->event_box), TRUE);
433 g_signal_connect (priv->event_box, "button-press-event",
434 G_CALLBACK (event_box_press_event), dialog);
436 /* Because ESD is synchronous, we wish to play sound after the
437 note is already on screen to avoid blocking its appearance */
438 g_signal_connect (GTK_WIDGET (dialog), "show",
439 G_CALLBACK (on_show_cb), NULL);
441 /* Acquire real references to our internal children, since
442 they are not nessecarily packed into container in each
444 g_object_ref_sink (priv->event_box);
445 g_object_ref_sink (priv->label);
447 gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE);
448 gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
450 /* We use special hint to turn the note into information notification. */
451 gtk_window_set_type_hint (GTK_WINDOW (dialog), GDK_WINDOW_TYPE_HINT_NOTIFICATION);
456 hildon_note_finalize (GObject *obj_self)
458 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (obj_self);
461 /* FIXME Some of this stuff should be moved to dispose */
463 /* Free internal data */
465 g_object_unref (priv->event_box);
468 g_object_unref (priv->label);
474 if (priv->stock_icon) {
475 g_free (priv->stock_icon);
476 priv->stock_icon = NULL;
478 if (priv->idle_handler) {
479 g_source_remove (priv->idle_handler);
480 priv->idle_handler = 0;
483 if (priv->progressbar)
484 g_object_unref (priv->progressbar);
486 if (priv->original_description)
487 g_free (priv->original_description);
489 G_OBJECT_CLASS (parent_class)->finalize (obj_self);
493 label_size_request (GtkWidget *label,
497 gint note_height = MAX (HILDON_INFORMATION_NOTE_MIN_HEIGHT, req->height);
498 g_object_set (note, "height-request", note_height, NULL);
502 resize_button (GtkWidget *button, gpointer *data)
504 gint width = GPOINTER_TO_INT (data);
505 g_object_set (button, "width-request", width, NULL);
509 hildon_note_orientation_update (HildonNote *note, GdkScreen *screen)
511 GtkDialog *dialog = GTK_DIALOG (note);
512 HildonNotePrivate* priv = HILDON_NOTE_GET_PRIVATE (note);
514 gint button_width, padding;
515 gboolean portrait = gdk_screen_get_width (screen) < gdk_screen_get_height (screen);
517 g_object_ref (dialog->action_area);
518 unpack_widget (dialog->action_area);
521 parent = dialog->vbox;
522 button_width = gdk_screen_get_width (screen) - HILDON_MARGIN_DOUBLE * 2;
523 padding = HILDON_MARGIN_DOUBLE;
525 parent = gtk_widget_get_parent (dialog->vbox);
526 button_width = priv->button_width;
530 gtk_box_pack_end (GTK_BOX (parent), dialog->action_area,
532 gtk_box_reorder_child (GTK_BOX (parent), dialog->action_area, 0);
533 gtk_container_foreach (GTK_CONTAINER (dialog->action_area),
534 (GtkCallback) resize_button,
535 GINT_TO_POINTER (button_width));
536 g_object_unref (dialog->action_area);
537 gtk_container_child_set (GTK_CONTAINER (priv->box), priv->label,
538 "padding", padding, NULL);
542 hildon_note_size_request (GtkWidget *note,
545 GTK_WIDGET_CLASS (parent_class)->size_request (note, req);
546 req->width = gdk_screen_get_width (gtk_widget_get_screen (note));
550 screen_size_changed (GdkScreen *screen,
553 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
555 hildon_note_rename (HILDON_NOTE (note));
557 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
558 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
559 gint screen_width = gdk_screen_get_width (screen);
560 gint text_width = screen_width - HILDON_INFORMATION_NOTE_MARGIN * 2;
561 g_object_set (priv->label, "width-request", text_width, NULL);
564 } else if (priv->note_n == HILDON_NOTE_TYPE_CONFIRMATION) {
565 hildon_note_orientation_update (HILDON_NOTE (note), screen);
570 hildon_note_realize (GtkWidget *widget)
573 gboolean is_info_note = FALSE;
575 const gchar *notification_type;
576 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
579 /* Make widget->window accessible */
580 GTK_WIDGET_CLASS (parent_class)->realize (widget);
582 /* Border only, no titlebar */
583 gdk_window_set_decorations (widget->window, GDK_DECOR_BORDER);
585 /* Set the _HILDON_NOTIFICATION_TYPE property so Matchbox places the window correctly */
586 display = gdk_drawable_get_display (widget->window);
587 atom = gdk_x11_get_xatom_by_name_for_display (display, "_HILDON_NOTIFICATION_TYPE");
589 if (priv->note_n == HILDON_NOTE_TYPE_INFORMATION ||
590 priv->note_n == HILDON_NOTE_TYPE_INFORMATION_THEME) {
591 notification_type = "_HILDON_NOTIFICATION_TYPE_INFO";
594 notification_type = "_HILDON_NOTIFICATION_TYPE_CONFIRMATION";
597 XChangeProperty (GDK_WINDOW_XDISPLAY (widget->window), GDK_WINDOW_XID (widget->window),
598 atom, XA_STRING, 8, PropModeReplace, (guchar *) notification_type,
599 strlen (notification_type));
602 g_signal_connect (priv->label, "size-request", G_CALLBACK (label_size_request), widget);
605 GdkScreen *screen = gtk_widget_get_screen (widget);
606 g_signal_connect (screen, "size-changed", G_CALLBACK (screen_size_changed), widget);
607 screen_size_changed (screen, widget);
611 hildon_note_unrealize (GtkWidget *widget)
613 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
614 GdkScreen *screen = gtk_widget_get_screen (widget);
616 g_signal_handlers_disconnect_by_func (screen, G_CALLBACK (screen_size_changed), widget);
617 g_signal_handlers_disconnect_by_func (priv->label, G_CALLBACK (label_size_request), widget);
619 GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
623 /* Helper function for removing a widget from it's container.
624 we own a separate reference to each object we try to unpack,
625 so extra referencing is not needed. */
627 unpack_widget (GtkWidget *widget)
629 g_assert (widget == NULL || GTK_IS_WIDGET (widget));
631 if (widget && widget->parent)
632 gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
636 Name the widget and text label based on the note type. This is used
637 by the theme to give proper backgrounds depending on the note type.
640 hildon_note_rename (HildonNote *note)
643 GEnumClass *enum_class;
645 GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (note));
646 gboolean portrait = gdk_screen_get_width (screen) < gdk_screen_get_height (screen);
647 const gchar *portrait_suffix = portrait ? "-portrait" : NULL;
649 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
651 enum_class = g_type_class_ref (HILDON_TYPE_NOTE_TYPE);
652 value = g_enum_get_value (enum_class, priv->note_n);
654 name = g_strconcat ("HildonNote-", value->value_nick, portrait_suffix, NULL);
655 gtk_widget_set_name (GTK_WIDGET (note), name);
658 name = g_strconcat ("HildonNoteLabel-", value->value_nick, NULL);
659 gtk_widget_set_name (priv->label, name);
662 g_type_class_unref (enum_class);
666 hildon_note_rebuild (HildonNote *note)
669 HildonNotePrivate *priv;
670 gboolean is_info_note = FALSE;
672 g_assert (HILDON_IS_NOTE (note));
674 priv = HILDON_NOTE_GET_PRIVATE (note);
677 dialog = GTK_DIALOG (note);
679 /* Reuse exiting content widgets for new layout */
680 unpack_widget (priv->label);
681 unpack_widget (priv->progressbar);
682 unpack_widget (priv->event_box);
684 /* Destroy old layout and buttons */
686 gtk_widget_destroy (priv->box);
689 if (priv->okButton) {
690 gtk_widget_destroy (priv->okButton);
691 priv->okButton = NULL;
693 if (priv->cancelButton) {
694 gtk_widget_destroy (priv->cancelButton);
695 priv->cancelButton = NULL;
698 /* Add needed buttons and images for each note type */
699 switch (priv->note_n)
701 case HILDON_NOTE_TYPE_CONFIRMATION:
702 priv->okButton = gtk_dialog_add_button (dialog,
703 _("wdgt_bd_yes"), GTK_RESPONSE_OK);
704 priv->cancelButton = gtk_dialog_add_button (dialog,
705 _("wdgt_bd_no"), GTK_RESPONSE_CANCEL);
706 gtk_widget_show (priv->cancelButton);
707 g_object_get (priv->okButton, "width-request",
708 &priv->button_width, NULL);
709 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
712 case HILDON_NOTE_TYPE_PROGRESSBAR:
713 priv->cancelButton = gtk_dialog_add_button (dialog,
714 _("wdgt_bd_stop"), GTK_RESPONSE_CANCEL);
715 gtk_widget_show (priv->cancelButton);
716 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
719 case HILDON_NOTE_TYPE_INFORMATION_THEME:
720 case HILDON_NOTE_TYPE_INFORMATION:
724 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
729 /* Don't display the action area if this is just an information
730 * note. This prevents text from being slightly aligned to the
734 gtk_widget_hide (dialog->action_area);
736 gtk_widget_show (dialog->action_area);
738 gtk_widget_set_no_show_all (dialog->action_area, is_info_note);
740 /* Pack label vertically. Spacing is only necessary for the progressbar note. */
741 priv->box = gtk_vbox_new (FALSE, priv->progressbar ? HILDON_MARGIN_DOUBLE : 0);
742 gtk_container_add (GTK_CONTAINER (priv->event_box), priv->box);
743 gtk_box_pack_start (GTK_BOX (priv->box), priv->label, TRUE, TRUE, 0);
745 if (priv->progressbar)
746 gtk_box_pack_start (GTK_BOX (priv->box), priv->progressbar, FALSE, FALSE, 0);
748 gtk_container_add (GTK_CONTAINER (dialog->vbox), priv->event_box);
750 gtk_widget_show_all (priv->event_box);
754 * hildon_note_new_confirmation_add_buttons:
755 * @parent: the parent window. The X window ID of the parent window
756 * has to be the same as the X window ID of the application. This is
757 * important so that the window manager could handle the windows
759 * In GTK the X window ID can be checked using
760 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
761 * @description: the message to confirm
762 * @Varargs: arguments pairs for new buttons(label and return value).
763 * Terminate the list with %NULL value.
765 * Create a new confirmation note with custom buttons. Confirmation
766 * note has a text and any number of buttons. It's important to note
767 * that even though the name of the function might suggest, the
768 * default ok/cancel buttons are not appended but you have to provide
769 * all of the buttons.
771 * FIXME: This doc seems to be wrong, the two buttons aren't added so
772 * it would only contain the "additional" buttons? However, changing
773 * this would break those applications that rely on current behaviour.
775 * Returns: A #GtkWidget pointer of the note
778 hildon_note_new_confirmation_add_buttons (GtkWindow *parent,
779 const gchar *description,
787 g_return_val_if_fail (description != NULL, NULL);
789 GtkWidget *conf_note =
790 g_object_new (HILDON_TYPE_NOTE,
791 "note-type", HILDON_NOTE_TYPE_CONFIRMATION_BUTTON,
792 "description", description,
796 gtk_window_set_transient_for (GTK_WINDOW (conf_note), parent);
798 /* Add the buttons from varargs */
799 va_start(args, description);
802 message = va_arg (args, char *);
807 value = va_arg (args, int);
809 button = gtk_dialog_add_button (GTK_DIALOG (conf_note), message, value);
810 /* maemo-gtk is going to set the "no-show-all" property all
811 cancel/close-like buttons to TRUE, so that they are not shown. On
812 the other hand, this confirmation note with custom buttons should
813 not obey this rule, so we need to make sure they are shown. */
814 gtk_widget_show (button);
815 gtk_widget_set_no_show_all (button, FALSE);
825 * hildon_note_new_confirmation:
826 * @parent: the parent window. The X window ID of the parent window
827 * has to be the same as the X window ID of the application. This is
828 * important so that the window manager could handle the windows
829 * correctly. In GTK the X window ID can be checked using
830 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
831 * @description: the message to confirm
833 * Create a new confirmation note. Confirmation note has a text (description)
834 * that you specify and two buttons.
836 * Returns: a #GtkWidget pointer of the note
839 hildon_note_new_confirmation (GtkWindow *parent,
840 const gchar *description)
842 GtkWidget *dialog = NULL;
844 g_return_val_if_fail (description != NULL, NULL);
846 dialog = g_object_new (HILDON_TYPE_NOTE,
848 HILDON_NOTE_TYPE_CONFIRMATION,
849 "description", description, NULL);
852 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
858 * hildon_note_new_confirmation_with_icon_name:
859 * @parent: the parent window. The X window ID of the parent window
860 * has to be the same as the X window ID of the application. This is
861 * important so that the window manager could handle the windows
862 * correctly. In GTK the X window ID can be checked using
863 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
864 * @description: the message to confirm
865 * @icon_name: icon to be displayed. If NULL, default icon is used.
867 * Create a new confirmation note. Confirmation note has a text (description)
868 * that you specify and two buttons.
870 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
871 * with this function will be ignored. Use hildon_note_new_confirmation() instead.
873 * Returns: a #GtkWidget pointer of the note
876 hildon_note_new_confirmation_with_icon_name (GtkWindow *parent,
877 const gchar *description,
878 const gchar *icon_name)
882 dialog = hildon_note_new_confirmation (parent, description);
883 g_object_set (dialog, "icon", icon_name, NULL);
889 * hildon_note_new_information:
890 * @parent: the parent window. The X window ID of the parent window
891 * has to be the same as the X window ID of the application. This is
892 * important so that the window manager could handle the windows
893 * correctly. In GTK the X window ID can be checked using
894 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
895 * @description: the message to confirm
897 * Create a new information note. Information note has a text (description)
898 * that you specify and an OK button.
900 * Returns: a #GtkWidget pointer of the note
903 hildon_note_new_information (GtkWindow *parent,
904 const gchar *description)
906 GtkWidget *dialog = NULL;
908 g_return_val_if_fail (description != NULL, NULL);
910 dialog = g_object_new (HILDON_TYPE_NOTE,
912 HILDON_NOTE_TYPE_INFORMATION_THEME,
913 "description", description, NULL);
916 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
922 * hildon_note_new_information_with_icon_name:
923 * @parent: the parent window. The X window ID of the parent window
924 * has to be the same as the X window ID of the application. This is
925 * important so that the window manager could handle the windows
926 * correctly. In GTK the X window ID can be checked using
927 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
928 * @description: the message to confirm
929 * @icon_name: icon to be displayed. If NULL, default icon is used.
931 * Create a new information note. Information note has text(description)
932 * that you specify, an OK button and an icon.
934 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
935 * with this function will be ignored. Use hildon_note_new_information() instead.
937 * Returns: a #GtkWidget pointer of the note
940 hildon_note_new_information_with_icon_name (GtkWindow * parent,
941 const gchar *description,
942 const gchar *icon_name)
946 dialog = hildon_note_new_information (parent, description);
947 g_object_set (dialog, "icon", icon_name, NULL);
952 /* FIXME This documentation string LIES! */
955 * hildon_note_new_cancel_with_progress_bar:
956 * @parent: the parent window. The X window ID of the parent window
957 * has to be the same as the X window ID of the application. This is
958 * important so that the window manager could handle the windows
959 * correctly. In GTK the X window ID can be checked using
960 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
961 * @description: the action to cancel
962 * @progressbar: a pointer to #GtkProgressBar to be filled with the
963 * progressbar assigned to this note. Use this to set the fraction of
964 * progressbar done. This parameter can be %NULL as well, in which
965 * case plain text cancel note appears.
967 * Create a new cancel note with a progress bar. Cancel note has
968 * text(description) that you specify, a Cancel button and a progress bar.
970 * Returns: a #GtkDialog. Use this to get rid of this note when you
974 hildon_note_new_cancel_with_progress_bar (GtkWindow *parent,
975 const gchar *description,
976 GtkProgressBar *progressbar)
978 GtkWidget *dialog = NULL;
980 g_return_val_if_fail (description != NULL, NULL);
982 dialog = g_object_new (HILDON_TYPE_NOTE,
984 HILDON_NOTE_TYPE_PROGRESSBAR,
985 "description", description,
990 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
997 * hildon_note_set_button_text:
998 * @note: a #HildonNote
999 * @text: sets the button text and if there is two buttons in dialog,
1000 * the button texts will be <text>, "Cancel".
1002 * Sets the text of the button in @note.
1005 hildon_note_set_button_text (HildonNote *note,
1008 HildonNotePrivate *priv;
1010 g_return_if_fail (HILDON_IS_NOTE (note));
1012 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
1015 if (priv->okButton) {
1016 gtk_button_set_label (GTK_BUTTON (priv->okButton), text);
1017 gtk_button_set_label (GTK_BUTTON (priv->cancelButton),
1020 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text);
1025 * hildon_note_set_button_texts:
1026 * @note: a #HildonNote
1027 * @text_ok: the new text of the default OK button
1028 * @text_cancel: the new text of the default cancel button
1030 * Sets the text for the buttons in @note.
1033 hildon_note_set_button_texts (HildonNote *note,
1034 const gchar *text_ok,
1035 const gchar *text_cancel)
1037 HildonNotePrivate *priv;
1039 g_return_if_fail (HILDON_IS_NOTE (note));
1041 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
1044 if (priv->okButton) {
1045 gtk_button_set_label (GTK_BUTTON (priv->okButton), text_ok);
1046 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1048 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1053 on_show_cb (GtkWidget *widget,
1056 HildonNotePrivate *priv;
1058 priv = HILDON_NOTE_GET_PRIVATE (widget);
1059 priv->idle_handler = g_idle_add (sound_handling, widget);
1062 /* We play a system sound when the note comes visible */
1064 sound_handling (gpointer data)
1066 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (data);
1069 switch (priv->note_n)
1071 case HILDON_NOTE_TYPE_INFORMATION:
1072 case HILDON_NOTE_TYPE_INFORMATION_THEME:
1073 hildon_play_system_sound (INFORMATION_SOUND_PATH);
1076 case HILDON_NOTE_TYPE_CONFIRMATION:
1077 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
1078 hildon_play_system_sound (CONFIRMATION_SOUND_PATH);
1085 priv->idle_handler = 0;