2005-10-25 [wwp] 1.9.15cvs102
[claws.git] / src / noticeview.c
index 953662ba053a1deee53de3c03d7acbe9f9dec7b7..59e7ef997f767fe2bb14959f52438edde88aaf89 100644 (file)
 
 static void noticeview_button_pressed  (GtkButton *button, NoticeView *noticeview);
 static void noticeview_2ndbutton_pressed(GtkButton *button, NoticeView *noticeview);
+static gboolean noticeview_icon_pressed        (GtkWidget *widget, GdkEventButton *evt,
+                                        NoticeView *noticeview);
+static gboolean noticeview_visi_notify(GtkWidget *widget,
+                                      GdkEventVisibility *event,
+                                      NoticeView *noticeview);
+static gboolean noticeview_leave_notify(GtkWidget *widget,
+                                     GdkEventCrossing *event,
+                                     NoticeView *textview);
+static gboolean noticeview_enter_notify(GtkWidget *widget,
+                                     GdkEventCrossing *event,
+                                     NoticeView *textview);
+
+static GdkCursor *hand_cursor = NULL;
 
 NoticeView *noticeview_create(MainWindow *mainwin)
 {
@@ -58,10 +71,15 @@ NoticeView *noticeview_create(MainWindow *mainwin)
        GtkWidget  *text;
        GtkWidget  *widget;
        GtkWidget  *widget2;
+       GtkWidget  *evtbox;
+       GtkTooltips *tooltips;
 
        debug_print("Creating notice view...\n");
        noticeview = g_new0(NoticeView, 1);
 
+       if (!hand_cursor)
+               hand_cursor = gdk_cursor_new(GDK_HAND2);
+
        noticeview->window = mainwin->window;
        
        vbox = gtk_vbox_new(FALSE, 4);
@@ -73,14 +91,27 @@ NoticeView *noticeview_create(MainWindow *mainwin)
        gtk_widget_show(hbox);
        gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 1);
 
+       evtbox = gtk_event_box_new();
+       gtk_event_box_set_visible_window(GTK_EVENT_BOX(evtbox), FALSE);
+       gtk_widget_show(evtbox);
+
        icon = stock_pixmap_widget(noticeview->window, STOCK_PIXMAP_NOTICE_WARN); 
-#if 0
-       /* also possible... */
-       icon = gtk_pixmap_new(NULL, NULL);
-#endif
+
        gtk_widget_show(icon);
+       g_signal_connect(G_OBJECT(evtbox), "button-press-event", 
+                        G_CALLBACK(noticeview_icon_pressed),
+                        (gpointer) noticeview);
+       g_signal_connect(G_OBJECT(evtbox), "visibility-notify-event",
+                        G_CALLBACK(noticeview_visi_notify), noticeview);
+       g_signal_connect(G_OBJECT(evtbox), "motion-notify-event",
+                        G_CALLBACK(noticeview_visi_notify), noticeview);
+       g_signal_connect(G_OBJECT(evtbox), "leave-notify-event",
+                        G_CALLBACK(noticeview_leave_notify), noticeview);
+       g_signal_connect(G_OBJECT(evtbox), "enter-notify-event",
+                        G_CALLBACK(noticeview_enter_notify), noticeview);
        
-       gtk_box_pack_start(GTK_BOX(hbox), icon, FALSE, TRUE, 0);
+       gtk_container_add(GTK_CONTAINER(evtbox), icon);
+       gtk_box_pack_start(GTK_BOX(hbox), evtbox, FALSE, TRUE, 0);
        
        text = gtk_label_new("");
        gtk_widget_show(text);
@@ -100,15 +131,18 @@ NoticeView *noticeview_create(MainWindow *mainwin)
                         (gpointer) noticeview);
        gtk_box_pack_start(GTK_BOX(hbox), widget2, FALSE, FALSE, 0);
        
+       tooltips = gtk_tooltips_new();
+       
        noticeview->vbox   = vbox;
        noticeview->hsep   = hsep;
        noticeview->hbox   = hbox;
        noticeview->icon   = icon;
        noticeview->text   = text;
        noticeview->button = widget;
-       noticeview->button2 = widget2;
-
-       noticeview->visible = TRUE;
+       noticeview->button2= widget2;
+       noticeview->evtbox = evtbox;
+       noticeview->visible= TRUE;
+       noticeview->tooltips = tooltips;
 
        return noticeview;
 }
@@ -178,6 +212,41 @@ static void noticeview_button_pressed(GtkButton *button, NoticeView *noticeview)
        }
 }
 
+static gboolean noticeview_icon_pressed(GtkWidget *widget, GdkEventButton *evt,
+                                   NoticeView *noticeview)
+{
+       if (evt && evt->button == 1 && noticeview->icon_clickable) {
+               noticeview_button_pressed(NULL, noticeview);
+       }
+       return FALSE;
+}
+
+static gboolean noticeview_visi_notify(GtkWidget *widget,
+                                      GdkEventVisibility *event,
+                                      NoticeView *noticeview)
+{
+       if (noticeview->icon_clickable)
+               gdk_window_set_cursor(noticeview->evtbox->window, hand_cursor);
+       return FALSE;
+}
+
+static gboolean noticeview_leave_notify(GtkWidget *widget,
+                                     GdkEventCrossing *event,
+                                     NoticeView *noticeview)
+{
+       gdk_window_set_cursor(noticeview->evtbox->window, NULL);
+       return FALSE;
+}
+
+static gboolean noticeview_enter_notify(GtkWidget *widget,
+                                     GdkEventCrossing *event,
+                                     NoticeView *noticeview)
+{
+       if (noticeview->icon_clickable)
+               gdk_window_set_cursor(noticeview->evtbox->window, hand_cursor);
+       return FALSE;
+}
+
 void noticeview_set_2ndbutton_text(NoticeView *noticeview, const char *text)
 {
        g_return_if_fail(noticeview);
@@ -215,3 +284,17 @@ void noticeview_set_icon(NoticeView *noticeview, StockPixmap icon)
        
        gtk_image_set_from_pixmap(GTK_IMAGE(noticeview->icon), pixmap, bitmap);
 }
+
+void noticeview_set_icon_clickable(NoticeView *noticeview, gboolean setting)
+{
+       noticeview->icon_clickable = setting;
+}              
+
+void noticeview_set_tooltip (NoticeView *noticeview, const gchar *text)
+{
+       gtk_tooltips_set_tip(GTK_TOOLTIPS(noticeview->tooltips), 
+                       noticeview->evtbox,
+                       text,
+                       NULL);
+
+}