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-gtk.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);
609 hildon_gtk_window_set_portrait_flags (GTK_WINDOW (widget), HILDON_PORTRAIT_MODE_SUPPORT);
613 hildon_note_unrealize (GtkWidget *widget)
615 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (widget);
616 GdkScreen *screen = gtk_widget_get_screen (widget);
618 g_signal_handlers_disconnect_by_func (screen, G_CALLBACK (screen_size_changed), widget);
619 g_signal_handlers_disconnect_by_func (priv->label, G_CALLBACK (label_size_request), widget);
621 GTK_WIDGET_CLASS (parent_class)->unrealize (widget);
625 /* Helper function for removing a widget from it's container.
626 we own a separate reference to each object we try to unpack,
627 so extra referencing is not needed. */
629 unpack_widget (GtkWidget *widget)
631 g_assert (widget == NULL || GTK_IS_WIDGET (widget));
633 if (widget && widget->parent)
634 gtk_container_remove (GTK_CONTAINER (widget->parent), widget);
638 Name the widget and text label based on the note type. This is used
639 by the theme to give proper backgrounds depending on the note type.
642 hildon_note_rename (HildonNote *note)
645 GEnumClass *enum_class;
647 GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (note));
648 gboolean portrait = gdk_screen_get_width (screen) < gdk_screen_get_height (screen);
649 const gchar *portrait_suffix = portrait ? "-portrait" : NULL;
651 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (note);
653 enum_class = g_type_class_ref (HILDON_TYPE_NOTE_TYPE);
654 value = g_enum_get_value (enum_class, priv->note_n);
656 name = g_strconcat ("HildonNote-", value->value_nick, portrait_suffix, NULL);
657 gtk_widget_set_name (GTK_WIDGET (note), name);
660 name = g_strconcat ("HildonNoteLabel-", value->value_nick, NULL);
661 gtk_widget_set_name (priv->label, name);
664 g_type_class_unref (enum_class);
668 hildon_note_rebuild (HildonNote *note)
671 HildonNotePrivate *priv;
672 gboolean is_info_note = FALSE;
674 g_assert (HILDON_IS_NOTE (note));
676 priv = HILDON_NOTE_GET_PRIVATE (note);
679 dialog = GTK_DIALOG (note);
681 /* Reuse exiting content widgets for new layout */
682 unpack_widget (priv->label);
683 unpack_widget (priv->progressbar);
684 unpack_widget (priv->event_box);
686 /* Destroy old layout and buttons */
688 gtk_widget_destroy (priv->box);
691 if (priv->okButton) {
692 gtk_widget_destroy (priv->okButton);
693 priv->okButton = NULL;
695 if (priv->cancelButton) {
696 gtk_widget_destroy (priv->cancelButton);
697 priv->cancelButton = NULL;
700 /* Add needed buttons and images for each note type */
701 switch (priv->note_n)
703 case HILDON_NOTE_TYPE_CONFIRMATION:
704 priv->okButton = gtk_dialog_add_button (dialog,
705 _("wdgt_bd_yes"), GTK_RESPONSE_OK);
706 priv->cancelButton = gtk_dialog_add_button (dialog,
707 _("wdgt_bd_no"), GTK_RESPONSE_CANCEL);
708 gtk_widget_show (priv->cancelButton);
709 g_object_get (priv->okButton, "width-request",
710 &priv->button_width, NULL);
711 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
714 case HILDON_NOTE_TYPE_PROGRESSBAR:
715 priv->cancelButton = gtk_dialog_add_button (dialog,
716 _("wdgt_bd_stop"), GTK_RESPONSE_CANCEL);
717 gtk_widget_show (priv->cancelButton);
718 gtk_widget_set_no_show_all (priv->cancelButton, FALSE);
721 case HILDON_NOTE_TYPE_INFORMATION_THEME:
722 case HILDON_NOTE_TYPE_INFORMATION:
726 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
731 /* Don't display the action area if this is just an information
732 * note. This prevents text from being slightly aligned to the
736 gtk_widget_hide (dialog->action_area);
738 gtk_widget_show (dialog->action_area);
740 gtk_widget_set_no_show_all (dialog->action_area, is_info_note);
742 /* Pack label vertically. Spacing is only necessary for the progressbar note. */
743 priv->box = gtk_vbox_new (FALSE, priv->progressbar ? HILDON_MARGIN_DOUBLE : 0);
744 gtk_container_add (GTK_CONTAINER (priv->event_box), priv->box);
745 gtk_box_pack_start (GTK_BOX (priv->box), priv->label, TRUE, TRUE, 0);
747 if (priv->progressbar)
748 gtk_box_pack_start (GTK_BOX (priv->box), priv->progressbar, FALSE, FALSE, 0);
750 gtk_container_add (GTK_CONTAINER (dialog->vbox), priv->event_box);
752 gtk_widget_show_all (priv->event_box);
756 * hildon_note_new_confirmation_add_buttons:
757 * @parent: the parent window. The X window ID of the parent window
758 * has to be the same as the X window ID of the application. This is
759 * important so that the window manager could handle the windows
761 * In GTK the X window ID can be checked using
762 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
763 * @description: the message to confirm
764 * @Varargs: arguments pairs for new buttons(label and return value).
765 * Terminate the list with %NULL value.
767 * Create a new confirmation note with custom buttons. Confirmation
768 * note has a text and any number of buttons. It's important to note
769 * that even though the name of the function might suggest, the
770 * default ok/cancel buttons are not appended but you have to provide
771 * all of the buttons.
773 * FIXME: This doc seems to be wrong, the two buttons aren't added so
774 * it would only contain the "additional" buttons? However, changing
775 * this would break those applications that rely on current behaviour.
777 * Returns: A #GtkWidget pointer of the note
780 hildon_note_new_confirmation_add_buttons (GtkWindow *parent,
781 const gchar *description,
789 g_return_val_if_fail (description != NULL, NULL);
791 GtkWidget *conf_note =
792 g_object_new (HILDON_TYPE_NOTE,
793 "note-type", HILDON_NOTE_TYPE_CONFIRMATION_BUTTON,
794 "description", description,
798 gtk_window_set_transient_for (GTK_WINDOW (conf_note), parent);
800 /* Add the buttons from varargs */
801 va_start(args, description);
804 message = va_arg (args, char *);
809 value = va_arg (args, int);
811 button = gtk_dialog_add_button (GTK_DIALOG (conf_note), message, value);
812 /* maemo-gtk is going to set the "no-show-all" property all
813 cancel/close-like buttons to TRUE, so that they are not shown. On
814 the other hand, this confirmation note with custom buttons should
815 not obey this rule, so we need to make sure they are shown. */
816 gtk_widget_show (button);
817 gtk_widget_set_no_show_all (button, FALSE);
827 * hildon_note_new_confirmation:
828 * @parent: the parent window. The X window ID of the parent window
829 * has to be the same as the X window ID of the application. This is
830 * important so that the window manager could handle the windows
831 * correctly. In GTK the X window ID can be checked using
832 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
833 * @description: the message to confirm
835 * Create a new confirmation note. Confirmation note has a text (description)
836 * that you specify and two buttons.
838 * Returns: a #GtkWidget pointer of the note
841 hildon_note_new_confirmation (GtkWindow *parent,
842 const gchar *description)
844 GtkWidget *dialog = NULL;
846 g_return_val_if_fail (description != NULL, NULL);
848 dialog = g_object_new (HILDON_TYPE_NOTE,
850 HILDON_NOTE_TYPE_CONFIRMATION,
851 "description", description, NULL);
854 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
860 * hildon_note_new_confirmation_with_icon_name:
861 * @parent: the parent window. The X window ID of the parent window
862 * has to be the same as the X window ID of the application. This is
863 * important so that the window manager could handle the windows
864 * correctly. In GTK the X window ID can be checked using
865 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
866 * @description: the message to confirm
867 * @icon_name: icon to be displayed. If NULL, default icon is used.
869 * Create a new confirmation note. Confirmation note has a text (description)
870 * that you specify and two buttons.
872 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
873 * with this function will be ignored. Use hildon_note_new_confirmation() instead.
875 * Returns: a #GtkWidget pointer of the note
878 hildon_note_new_confirmation_with_icon_name (GtkWindow *parent,
879 const gchar *description,
880 const gchar *icon_name)
884 dialog = hildon_note_new_confirmation (parent, description);
885 g_object_set (dialog, "icon", icon_name, NULL);
891 * hildon_note_new_information:
892 * @parent: the parent window. The X window ID of the parent window
893 * has to be the same as the X window ID of the application. This is
894 * important so that the window manager could handle the windows
895 * correctly. In GTK the X window ID can be checked using
896 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
897 * @description: the message to confirm
899 * Create a new information note. Information note has a text (description)
900 * that you specify and an OK button.
902 * Returns: a #GtkWidget pointer of the note
905 hildon_note_new_information (GtkWindow *parent,
906 const gchar *description)
908 GtkWidget *dialog = NULL;
910 g_return_val_if_fail (description != NULL, NULL);
912 dialog = g_object_new (HILDON_TYPE_NOTE,
914 HILDON_NOTE_TYPE_INFORMATION_THEME,
915 "description", description, NULL);
918 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
924 * hildon_note_new_information_with_icon_name:
925 * @parent: the parent window. The X window ID of the parent window
926 * has to be the same as the X window ID of the application. This is
927 * important so that the window manager could handle the windows
928 * correctly. In GTK the X window ID can be checked using
929 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
930 * @description: the message to confirm
931 * @icon_name: icon to be displayed. If NULL, default icon is used.
933 * Create a new information note. Information note has text(description)
934 * that you specify, an OK button and an icon.
936 * Deprecated: Since 2.2, icons are not shown in confirmation notes. Icons set
937 * with this function will be ignored. Use hildon_note_new_information() instead.
939 * Returns: a #GtkWidget pointer of the note
942 hildon_note_new_information_with_icon_name (GtkWindow * parent,
943 const gchar *description,
944 const gchar *icon_name)
948 dialog = hildon_note_new_information (parent, description);
949 g_object_set (dialog, "icon", icon_name, NULL);
954 /* FIXME This documentation string LIES! */
957 * hildon_note_new_cancel_with_progress_bar:
958 * @parent: the parent window. The X window ID of the parent window
959 * has to be the same as the X window ID of the application. This is
960 * important so that the window manager could handle the windows
961 * correctly. In GTK the X window ID can be checked using
962 * GDK_WINDOW_XID(GTK_WIDGET(parent)->window).
963 * @description: the action to cancel
964 * @progressbar: a pointer to #GtkProgressBar to be filled with the
965 * progressbar assigned to this note. Use this to set the fraction of
966 * progressbar done. This parameter can be %NULL as well, in which
967 * case plain text cancel note appears.
969 * Create a new cancel note with a progress bar. Cancel note has
970 * text(description) that you specify, a Cancel button and a progress bar.
972 * Returns: a #GtkDialog. Use this to get rid of this note when you
976 hildon_note_new_cancel_with_progress_bar (GtkWindow *parent,
977 const gchar *description,
978 GtkProgressBar *progressbar)
980 GtkWidget *dialog = NULL;
982 g_return_val_if_fail (description != NULL, NULL);
984 dialog = g_object_new (HILDON_TYPE_NOTE,
986 HILDON_NOTE_TYPE_PROGRESSBAR,
987 "description", description,
992 gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
999 * hildon_note_set_button_text:
1000 * @note: a #HildonNote
1001 * @text: sets the button text and if there is two buttons in dialog,
1002 * the button texts will be <text>, "Cancel".
1004 * Sets the text of the button in @note.
1007 hildon_note_set_button_text (HildonNote *note,
1010 HildonNotePrivate *priv;
1012 g_return_if_fail (HILDON_IS_NOTE (note));
1014 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
1017 if (priv->okButton) {
1018 gtk_button_set_label (GTK_BUTTON (priv->okButton), text);
1019 gtk_button_set_label (GTK_BUTTON (priv->cancelButton),
1022 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text);
1027 * hildon_note_set_button_texts:
1028 * @note: a #HildonNote
1029 * @text_ok: the new text of the default OK button
1030 * @text_cancel: the new text of the default cancel button
1032 * Sets the text for the buttons in @note.
1035 hildon_note_set_button_texts (HildonNote *note,
1036 const gchar *text_ok,
1037 const gchar *text_cancel)
1039 HildonNotePrivate *priv;
1041 g_return_if_fail (HILDON_IS_NOTE (note));
1043 priv = HILDON_NOTE_GET_PRIVATE (HILDON_NOTE (note));
1046 if (priv->okButton) {
1047 gtk_button_set_label (GTK_BUTTON (priv->okButton), text_ok);
1048 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1050 gtk_button_set_label (GTK_BUTTON (priv->cancelButton), text_cancel);
1055 on_show_cb (GtkWidget *widget,
1058 HildonNotePrivate *priv;
1060 priv = HILDON_NOTE_GET_PRIVATE (widget);
1061 priv->idle_handler = g_idle_add (sound_handling, widget);
1064 /* We play a system sound when the note comes visible */
1066 sound_handling (gpointer data)
1068 HildonNotePrivate *priv = HILDON_NOTE_GET_PRIVATE (data);
1071 switch (priv->note_n)
1073 case HILDON_NOTE_TYPE_INFORMATION:
1074 case HILDON_NOTE_TYPE_INFORMATION_THEME:
1075 hildon_play_system_sound (INFORMATION_SOUND_PATH);
1078 case HILDON_NOTE_TYPE_CONFIRMATION:
1079 case HILDON_NOTE_TYPE_CONFIRMATION_BUTTON:
1080 hildon_play_system_sound (CONFIRMATION_SOUND_PATH);
1087 priv->idle_handler = 0;