]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-chat-view.c
Simplify chat theme system
[empathy.git] / libempathy-gtk / empathy-chat-view.c
index 947281590b544adbb1498b4c2e82e5e3343425bf..c7428e9df4bbb8a4ae7f527a5d2125e2be3d7588 100644 (file)
@@ -68,7 +68,6 @@ struct _EmpathyChatViewPriv {
        GtkTextBuffer *buffer;
 
        EmpathyTheme   *theme;
-       gpointer       theme_context;
 
        time_t         last_timestamp;
        BlockType      last_block_type;
@@ -130,7 +129,8 @@ static void     chat_view_clear_view_cb              (GtkMenuItem              *
 static gboolean chat_view_is_scrolled_down           (EmpathyChatView           *view);
 static void     chat_view_theme_changed_cb           (EmpathyThemeManager       *manager,
                                                      EmpathyChatView           *view);
-static void     chat_view_theme_updated_cb           (EmpathyTheme              *theme, 
+static void     chat_view_theme_notify_cb            (EmpathyTheme              *theme,
+                                                     GParamSpec                *param,
                                                      EmpathyChatView           *view);
 
 G_DEFINE_TYPE (EmpathyChatView, empathy_chat_view, GTK_TYPE_TEXT_VIEW);
@@ -233,12 +233,8 @@ chat_view_finalize (GObject *object)
 
        if (priv->theme) {
                g_signal_handlers_disconnect_by_func (priv->theme,
-                                                     chat_view_theme_updated_cb,
+                                                     chat_view_theme_notify_cb,
                                                      view);
-
-               empathy_theme_detach_from_view (priv->theme, priv->theme_context,
-                                              view);
-
                g_object_unref (priv->theme);
        }
 
@@ -796,8 +792,7 @@ empathy_chat_view_append_message (EmpathyChatView *view,
        
        chat_view_maybe_trim_buffer (view);
 
-       empathy_theme_append_message (priv->theme, priv->theme_context,
-                                     view, msg);
+       empathy_theme_append_message (priv->theme, view, msg);
 
        if (bottom) {
                empathy_chat_view_scroll_down (view);
@@ -820,9 +815,7 @@ empathy_chat_view_append_event (EmpathyChatView *view,
 
        chat_view_maybe_trim_buffer (view);
 
-       empathy_theme_append_event (priv->theme, 
-                                  priv->theme_context,
-                                  view, str);
+       empathy_theme_append_event (priv->theme, view, str);
 
        if (bottom) {
                empathy_chat_view_scroll_down (view);
@@ -852,13 +845,10 @@ empathy_chat_view_append_button (EmpathyChatView *view,
 
        bottom = chat_view_is_scrolled_down (view);
 
-       empathy_theme_append_timestamp (priv->theme, priv->theme_context,
-                                      view, NULL,
-                                      TRUE, TRUE);
+       empathy_theme_append_timestamp (priv->theme, view, NULL, TRUE, TRUE);
 
        if (message) {
-               empathy_theme_append_text (priv->theme, priv->theme_context,
-                                         view, message, tag, NULL);
+               empathy_theme_append_text (priv->theme, view, message, tag, NULL);
        }
 
        gtk_text_buffer_get_end_iter (priv->buffer, &iter);
@@ -1006,8 +996,6 @@ empathy_chat_view_clear (EmpathyChatView *view)
         */
        priv = GET_PRIV (view);
 
-       empathy_theme_view_cleared (priv->theme, priv->theme_context, view);
-
        priv->last_block_type = BLOCK_TYPE_NONE;
        priv->last_timestamp = 0;
 }
@@ -1370,16 +1358,11 @@ empathy_chat_view_get_theme (EmpathyChatView *view)
 }
 
 static void
-chat_view_theme_updated_cb (EmpathyTheme *theme, EmpathyChatView *view)
+chat_view_theme_notify_cb (EmpathyTheme    *theme,
+                          GParamSpec      *param,
+                          EmpathyChatView *view)
 {
-       EmpathyChatViewPriv *priv;
-
-       priv = GET_PRIV (view);
-       
-       empathy_theme_detach_from_view (priv->theme, priv->theme_context,
-                                      view);
-
-       priv->theme_context = empathy_theme_setup_with_view (theme, view);
+       empathy_theme_update_view (theme, view);
 }
 
 void
@@ -1394,24 +1377,19 @@ empathy_chat_view_set_theme (EmpathyChatView *view, EmpathyTheme *theme)
 
        if (priv->theme) {
                g_signal_handlers_disconnect_by_func (priv->theme,
-                                                     chat_view_theme_updated_cb,
+                                                     chat_view_theme_notify_cb,
                                                      view);
-               empathy_theme_detach_from_view (priv->theme, priv->theme_context,
-                                              view);
-
                g_object_unref (priv->theme);
        }
 
        priv->theme = g_object_ref (theme);
 
-       g_signal_connect (priv->theme,
-                         "updated",
-                         G_CALLBACK (chat_view_theme_updated_cb),
+       empathy_theme_update_view (theme, view);
+       g_signal_connect (priv->theme, "notify",
+                         G_CALLBACK (chat_view_theme_notify_cb),
                          view);
 
-       priv->theme_context = empathy_theme_setup_with_view (theme, view);
-
-       /* FIXME: Possibly redraw the function and make it a property */
+       /* FIXME: Redraw all messages using the new theme */
 }
 
 void