public
Description: A Clutter-based Twitter client
Homepage: http://live.gnome.org/Tweet
Clone URL: git://github.com/ebassi/tweet.git
Search Repo:
Main window class

TweetWindow is a subclass of GtkWindow, holding the GtkClutterEmbed
widget, a TwitterClient and the various models that will be displayed
by the list views.

At the moment, just the TweetStatusView for the user's timeline is
present.
Emmanuele Bassi (author)
Thu Apr 17 21:44:26 -0700 2008
commit  9a22165ae7c824a7c7948d0869c54a826ac2d526
tree    ffaed311bf9b4e559aef1e31ed978b0586023054
parent  0f5efb5395c294de8dd407e3cc926552d5bbdb51
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
0
@@ -1 +1,147 @@
0
+#ifdef HAVE_CONFIG_H
0
+#include "config.h"
0
+#endif
0
+
0
+#include <glib-object.h>
0
+
0
+#include <gtk/gtk.h>
0
+
0
+#include <clutter/clutter.h>
0
+#include <clutter-gtk/gtk-clutter-embed.h>
0
+
0
+#include <tidy/tidy.h>
0
+
0
+#include <twitter-glib/twitter-glib.h>
0
+
0
+#include "tweet-config.h"
0
+#include "tweet-status-model.h"
0
+#include "tweet-status-view.h"
0
+#include "tweet-window.h"
0
+
0
+#define TWEET_WINDOW_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), TWEET_TYPE_WINDOW, TweetWindowPrivate))
0
+
0
+struct _TweetWindowPrivate
0
+{
0
+ GtkWidget *canvas;
0
+
0
+ TwitterClient *client;
0
+
0
+ TweetConfig *config;
0
+ TweetStatusModel *model;
0
+};
0
+
0
+G_DEFINE_TYPE (TweetWindow, tweet_window, GTK_TYPE_WINDOW);
0
+
0
+static void
0
+tweet_window_dispose (GObject *gobject)
0
+{
0
+ TweetWindowPrivate *priv = TWEET_WINDOW (gobject)->priv;
0
+
0
+ if (priv->client)
0
+ {
0
+ g_object_unref (priv->client);
0
+ priv->client = NULL;
0
+ }
0
+
0
+ if (priv->model)
0
+ {
0
+ g_object_unref (priv->model);
0
+ priv->model = NULL;
0
+ }
0
+
0
+ G_OBJECT_CLASS (tweet_window_parent_class)->dispose (gobject);
0
+}
0
+
0
+static void
0
+on_status_received (TwitterClient *client,
0
+ TwitterStatus *status,
0
+ const GError *error,
0
+ gpointer user_data)
0
+{
0
+ TweetWindow *window = user_data;
0
+
0
+ if (error)
0
+ {
0
+ g_warning ("Unable to retrieve status from Twitter: %s", error->message);
0
+ return;
0
+ }
0
+
0
+ g_print ("Received status [%u] from user %s\n",
0
+ twitter_status_get_id (status),
0
+ twitter_user_get_screen_name (twitter_status_get_user (status)));
0
+
0
+ tweet_status_model_append_status (window->priv->model, status);
0
+}
0
+
0
+static void
0
+tweet_window_constructed (GObject *gobject)
0
+{
0
+ TweetWindow *window = TWEET_WINDOW (gobject);
0
+ TweetWindowPrivate *priv = window->priv;
0
+ ClutterActor *stage;
0
+ ClutterActor *view;
0
+ ClutterActor *scroll;
0
+ ClutterColor stage_color = { 0, 0, 0, 255 };
0
+
0
+ stage = gtk_clutter_embed_get_stage (GTK_CLUTTER_EMBED (priv->canvas));
0
+ clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
0
+
0
+ view = tweet_status_view_new (priv->model);
0
+ scroll = tidy_finger_scroll_new (TIDY_FINGER_SCROLL_MODE_KINETIC);
0
+ clutter_container_add_actor (CLUTTER_CONTAINER (scroll), view);
0
+ clutter_actor_show (view);
0
+
0
+ clutter_actor_set_size (scroll, 350, 500);
0
+ clutter_actor_set_position (scroll, 6, 6);
0
+ clutter_container_add_actor (CLUTTER_CONTAINER (stage), scroll);
0
+ clutter_actor_show (scroll);
0
+
0
+ clutter_actor_show (stage);
0
+ gtk_widget_show (GTK_WIDGET (window));
0
+
0
+ twitter_client_get_user_timeline (priv->client, NULL, 0, NULL);
0
+}
0
+
0
+static void
0
+tweet_window_class_init (TweetWindowClass *klass)
0
+{
0
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
0
+
0
+ g_type_class_add_private (klass, sizeof (TweetWindowPrivate));
0
+
0
+ gobject_class->dispose = tweet_window_dispose;
0
+ gobject_class->constructed = tweet_window_constructed;
0
+}
0
+
0
+static void
0
+tweet_window_init (TweetWindow *window)
0
+{
0
+ TweetWindowPrivate *priv;
0
+
0
+ GTK_WINDOW (window)->type = GTK_WINDOW_TOPLEVEL;
0
+ gtk_window_set_default_size (GTK_WINDOW (window), 364, 500);
0
+ gtk_window_set_title (GTK_WINDOW (window), "Tweet");
0
+ g_signal_connect (window, "destroy", G_CALLBACK (gtk_main_quit), NULL);
0
+
0
+ window->priv = priv = TWEET_WINDOW_GET_PRIVATE (window);
0
+
0
+ priv->canvas = gtk_clutter_embed_new ();
0
+ gtk_container_add (GTK_CONTAINER (window), priv->canvas);
0
+ gtk_widget_show (priv->canvas);
0
+
0
+ priv->model = TWEET_STATUS_MODEL (tweet_status_model_new ());
0
+
0
+ priv->config = tweet_config_get_default ();
0
+ priv->client = twitter_client_new_for_user (tweet_config_get_username (priv->config),
0
+ tweet_config_get_password (priv->config));
0
+ g_signal_connect (priv->client,
0
+ "status-received", G_CALLBACK (on_status_received),
0
+ window);
0
+}
0
+
0
+GtkWidget *
0
+tweet_window_new (void)
0
+{
0
+ return g_object_new (TWEET_TYPE_WINDOW, NULL);
0
+}
...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
0
@@ -1 +1,37 @@
0
+#ifndef __TWEET_WINDOW_H__
0
+#define __TWEET_WINDOW_H__
0
+
0
+#include <gtk/gtkwindow.h>
0
+
0
+G_BEGIN_DECLS
0
+
0
+#define TWEET_TYPE_WINDOW (tweet_window_get_type ())
0
+#define TWEET_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TWEET_TYPE_WINDOW, TweetWindow))
0
+#define TWEET_IS_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TWEET_TYPE_WINDOW))
0
+#define TWEET_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TWEET_TYPE_WINDOW, TweetWindowClass))
0
+#define TWEET_IS_WINDOW_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TWEET_TYPE_WINDOW))
0
+#define TWEET_WINDOW_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TWEET_TYPE_WINDOW, TweetWindowClass))
0
+
0
+typedef struct _TweetWindow TweetWindow;
0
+typedef struct _TweetWindowPrivate TweetWindowPrivate;
0
+typedef struct _TweetWindowClass TweetWindowClass;
0
+
0
+struct _TweetWindow
0
+{
0
+ GtkWindow parent_instance;
0
+
0
+ TweetWindowPrivate *priv;
0
+};
0
+
0
+struct _TweetWindowClass
0
+{
0
+ GtkWindowClass parent_class;
0
+};
0
+
0
+GType tweet_window_get_type (void) G_GNUC_CONST;
0
+GtkWidget *tweet_window_new (void);
0
+
0
+G_END_DECLS
0
+
0
+#endif /* __TWEET_WINDOW_H__ */

Comments

    No one has commented yet.