ekiga r6645 - in trunk: . lib/engine/gui/gtk-frontend
- From: dsandras svn gnome org
- To: svn-commits-list gnome org
- Subject: ekiga r6645 - in trunk: . lib/engine/gui/gtk-frontend
- Date: Mon, 18 Aug 2008 20:04:15 +0000 (UTC)
Author: dsandras
Date: Mon Aug 18 20:04:15 2008
New Revision: 6645
URL: http://svn.gnome.org/viewvc/ekiga?rev=6645&view=rev
Log:
Visual improvements (?).
Modified:
trunk/ChangeLog
trunk/lib/engine/gui/gtk-frontend/chat-area.cpp
trunk/lib/engine/gui/gtk-frontend/chat-area.h
Modified: trunk/lib/engine/gui/gtk-frontend/chat-area.cpp
==============================================================================
--- trunk/lib/engine/gui/gtk-frontend/chat-area.cpp (original)
+++ trunk/lib/engine/gui/gtk-frontend/chat-area.cpp Mon Aug 18 20:04:15 2008
@@ -47,6 +47,7 @@
#include <string.h>
#include <stdarg.h>
+#include <gdk/gdkkeysyms.h>
class ChatAreaHelper;
@@ -61,7 +62,7 @@
/* we contain those, so no need to unref them */
GtkWidget* scrolled_text_window;
GtkWidget* text_view;
- GtkWidget* entry;
+ GtkWidget* message;
};
enum {
@@ -128,17 +129,12 @@
static void on_smiley_clicked (GtkButton* button,
gpointer data);
-static void on_bold_clicked (GtkButton* button,
- gpointer data);
+static void on_font_changed (GtkButton* button,
+ gpointer data);
-static void on_italic_clicked (GtkButton* button,
- gpointer data);
-
-static void on_underline_clicked (GtkButton* button,
- gpointer data);
-
-static void on_entry_activated (GtkWidget* entry,
- gpointer data);
+static gboolean message_activated_cb (GtkWidget *w,
+ GdkEventKey *key,
+ gpointer data);
static void on_chat_removed (ChatArea* self);
@@ -235,18 +231,18 @@
{
const gchar* text = NULL;
ChatArea* self = NULL;
- gint position;
+ GtkTextBuffer *buffer = NULL;
+ GtkTextIter iter;
self = (ChatArea*)data;
/* FIXME: that will break when gtk+ will change... */
text = gtk_label_get_text (GTK_LABEL(GTK_BIN(GTK_MENU_ITEM (item))->child));
- position = gtk_editable_get_position (GTK_EDITABLE (self->priv->entry));
-
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- text, strlen (text),
- &position);
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->priv->message));
+ gtk_text_buffer_get_iter_at_mark (buffer, &iter, gtk_text_buffer_get_insert (buffer));
+ gtk_text_buffer_insert (buffer, &iter, text, -1);
+ gtk_widget_grab_focus (self->priv->message);
}
static void
@@ -262,114 +258,91 @@
}
static void
-on_bold_clicked (G_GNUC_UNUSED GtkButton* button,
- gpointer data)
+on_font_changed (GtkButton* button,
+ gpointer data)
{
ChatArea* self = NULL;
- gint start;
- gint end;
- gint position;
+ GtkTextBuffer *buffer = NULL;
+ GtkTextMark *mark = NULL;
+ GtkTextIter start;
+ GtkTextIter end;
+
+ const char* opening_tag = NULL;
+ const char* closing_tag = NULL;
+ const char* tags = NULL;
self = (ChatArea*)data;
- if (gtk_editable_get_selection_bounds (GTK_EDITABLE (self->priv->entry),
- &start, & end)) {
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "</b>", 4, &end);
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "<b>", 3, &start);
- gtk_editable_select_region (GTK_EDITABLE (self->priv->entry),
- start, end - 1);
- } else {
-
- position = gtk_editable_get_position (GTK_EDITABLE (self->priv->entry));
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "<b></b>", 7, &position);
- gtk_editable_set_position (GTK_EDITABLE (self->priv->entry),
- position - 4);
- }
-}
+ if (!strcmp (gtk_button_get_label (GTK_BUTTON (button)), GTK_STOCK_BOLD)) {
-static void
-on_italic_clicked (G_GNUC_UNUSED GtkButton* button,
- gpointer data)
-{
- ChatArea* self = NULL;
- gint start;
- gint end;
- gint position;
+ opening_tag = "<b>";
+ closing_tag = "</b>";
+ tags = "<b></b>";
+ }
+ else if (!strcmp (gtk_button_get_label (GTK_BUTTON (button)), GTK_STOCK_ITALIC)) {
- self = (ChatArea*)data;
+ opening_tag = "<i>";
+ closing_tag = "</i>";
+ tags = "<i></i>";
+ }
+ else if (!strcmp (gtk_button_get_label (GTK_BUTTON (button)), GTK_STOCK_UNDERLINE)) {
- if (gtk_editable_get_selection_bounds (GTK_EDITABLE (self->priv->entry),
- &start, & end)) {
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "</i>", 4, &end);
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "<i>", 3, &start);
- gtk_editable_select_region (GTK_EDITABLE (self->priv->entry),
- start, end - 1);
- } else {
-
- position = gtk_editable_get_position (GTK_EDITABLE (self->priv->entry));
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "<i></i>", 7, &position);
- gtk_editable_set_position (GTK_EDITABLE (self->priv->entry),
- position - 4);
+ opening_tag = "<u>";
+ closing_tag = "</u>";
+ tags = "<u></u>";
}
-}
+
-static void
-on_underline_clicked (G_GNUC_UNUSED GtkButton* button,
- gpointer data)
-{
- ChatArea* self = NULL;
- gint start;
- gint end;
- gint position;
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->priv->message));
+ if (gtk_text_buffer_get_selection_bounds (buffer, &start, &end)) {
- self = (ChatArea*)data;
+ mark = gtk_text_buffer_create_mark (buffer, "end", &end, false);
+ gtk_text_buffer_insert (buffer, &start, opening_tag, -1);
+ gtk_text_buffer_get_iter_at_mark (buffer, &end, mark);
+ gtk_text_buffer_insert (buffer, &end, closing_tag, -1);
+ }
+ else {
- if (gtk_editable_get_selection_bounds (GTK_EDITABLE (self->priv->entry),
- &start, & end)) {
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "</u>", 4, &end);
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "<u>", 3, &start);
- gtk_editable_select_region (GTK_EDITABLE (self->priv->entry),
- start, end - 1);
- } else {
-
- position = gtk_editable_get_position (GTK_EDITABLE (self->priv->entry));
- gtk_editable_insert_text (GTK_EDITABLE (self->priv->entry),
- "<u></u>", 7, &position);
- gtk_editable_set_position (GTK_EDITABLE (self->priv->entry),
- position - 4);
+ gtk_text_buffer_get_iter_at_mark (buffer, &end, gtk_text_buffer_get_insert (buffer));
+ gtk_text_buffer_insert (buffer, &end, tags, -1);
}
+
+ gtk_widget_grab_focus (self->priv->message);
}
-static void
-on_entry_activated (GtkWidget* entry,
- gpointer data)
+static gboolean
+message_activated_cb (G_GNUC_UNUSED GtkWidget *w,
+ GdkEventKey *key,
+ gpointer data)
{
- ChatArea* self = NULL;
- const gchar* text = NULL;
+ ChatArea *self = CHAT_AREA (data);
+ GtkTextIter start_iter, end_iter;
+ GtkTextBuffer *buffer = NULL;
+ gchar *body = NULL;
+ std::string message;
- self = CHAT_AREA (data);
+ g_return_val_if_fail (data != NULL, false);
- text = gtk_entry_get_text (GTK_ENTRY (entry));
+ if (key->keyval == GDK_Return) {
- if (text != NULL && !g_str_equal (text, "")) {
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (self->priv->message));
+ gtk_text_buffer_get_start_iter (GTK_TEXT_BUFFER (buffer), &start_iter);
+ gtk_text_buffer_get_end_iter (GTK_TEXT_BUFFER (buffer), &end_iter);
+ body = gtk_text_buffer_get_text (GTK_TEXT_BUFFER (buffer), &start_iter, &end_iter, TRUE);
- if (self->priv->chat->send_message (text))
- gtk_entry_set_text (GTK_ENTRY (entry), "");
+ if (self->priv->chat->send_message (body))
+ gtk_text_buffer_delete (GTK_TEXT_BUFFER (buffer), &start_iter, &end_iter);
+
+ return true;
}
+
+ return false;
}
static void
on_chat_removed (ChatArea* self)
{
- gtk_widget_hide (self->priv->entry);
+ gtk_widget_hide (self->priv->message);
}
/* GObject code */
@@ -513,6 +486,8 @@
ChatArea* self = NULL;
GtkTextBuffer* buffer = NULL;
GmTextBufferEnhancerHelperIFace* helper = NULL;
+ GtkWidget *frame = NULL;
+ GtkWidget *sep = NULL;
self = (ChatArea*)instance;
@@ -547,9 +522,13 @@
gtk_container_add (GTK_CONTAINER (self->priv->scrolled_text_window),
self->priv->text_view);
- gtk_box_pack_start (GTK_BOX (self),
- self->priv->scrolled_text_window, TRUE, TRUE, 2);
- gtk_widget_show_all (self->priv->scrolled_text_window);
+
+ frame = gtk_frame_new (NULL);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
+ gtk_container_add (GTK_CONTAINER (frame), self->priv->scrolled_text_window);
+ gtk_paned_pack1 (GTK_PANED (self), frame, TRUE, TRUE);
+ gtk_widget_show_all (frame);
/* then we want to enhance this display */
@@ -648,10 +627,13 @@
G_CALLBACK (on_smiley_activated), self);
}
+ frame = gtk_frame_new (NULL);
vbox = gtk_vbox_new (FALSE, 2);
- gtk_box_pack_end (GTK_BOX (self), vbox,
- FALSE, TRUE, 2);
- gtk_widget_show (vbox);
+ gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
+ gtk_container_set_border_width (GTK_CONTAINER (frame), 5);
+ gtk_paned_pack2 (GTK_PANED (self), frame, TRUE, TRUE);
+ gtk_container_add (GTK_CONTAINER (frame), vbox);
+ gtk_widget_show_all (frame);
bbox = gtk_hbutton_box_new ();
/* FIXME gtk_box_set_spacing() seems to be neccesary, though we
@@ -659,10 +641,11 @@
/* FIXME the box doesn't do the 2px space at the left and right edges! */
gtk_box_set_spacing (GTK_BOX (bbox), 2);
gtk_box_pack_start (GTK_BOX (vbox), bbox,
- FALSE, TRUE, 2);
+ FALSE, FALSE, 2);
gtk_widget_show (bbox);
button = gtk_button_new_with_mnemonic (_("_Smile..."));
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
smiley_button = gtk_image_new_from_icon_name ("face-smile", GTK_ICON_SIZE_BUTTON);
gtk_button_set_image (GTK_BUTTON(button), smiley_button);
gtk_button_set_focus_on_click (GTK_BUTTON (button), FALSE);
@@ -673,35 +656,46 @@
gtk_widget_show (button);
button = gtk_button_new_from_stock (GTK_STOCK_BOLD);
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_button_set_focus_on_click (GTK_BUTTON (button), FALSE);
g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (on_bold_clicked), self);
+ G_CALLBACK (on_font_changed), self);
gtk_box_pack_start (GTK_BOX (bbox), button,
FALSE, TRUE, 2);
gtk_widget_show (button);
button = gtk_button_new_from_stock (GTK_STOCK_ITALIC);
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_button_set_focus_on_click (GTK_BUTTON (button), FALSE);
g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (on_italic_clicked), self);
+ G_CALLBACK (on_font_changed), self);
gtk_box_pack_start (GTK_BOX (bbox), button,
FALSE, TRUE, 2);
gtk_widget_show (button);
button = gtk_button_new_from_stock (GTK_STOCK_UNDERLINE);
+ gtk_button_set_relief (GTK_BUTTON (button), GTK_RELIEF_NONE);
gtk_button_set_focus_on_click (GTK_BUTTON (button), FALSE);
g_signal_connect (G_OBJECT (button), "clicked",
- G_CALLBACK (on_underline_clicked), self);
+ G_CALLBACK (on_font_changed), self);
gtk_box_pack_start (GTK_BOX (bbox), button,
FALSE, TRUE, 2);
gtk_widget_show (button);
- self->priv->entry = gtk_entry_new ();
- gtk_box_pack_start (GTK_BOX (vbox), self->priv->entry,
- FALSE, TRUE, 2);
- g_signal_connect (self->priv->entry, "activate",
- G_CALLBACK (on_entry_activated), self);
- gtk_widget_show (self->priv->entry);
+ sep = gtk_hseparator_new ();
+ gtk_box_pack_start (GTK_BOX (vbox), sep, FALSE, FALSE, 0);
+
+ self->priv->message = gtk_text_view_new ();
+ gtk_text_view_set_wrap_mode (GTK_TEXT_VIEW (self->priv->message),
+ GTK_WRAP_WORD_CHAR);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (self->priv->message), true);
+ g_signal_connect (GTK_OBJECT (self->priv->message), "key-press-event",
+ G_CALLBACK (message_activated_cb), self);
+ gtk_box_pack_start (GTK_BOX (vbox), self->priv->message,
+ TRUE, TRUE, 2);
+
+ gtk_widget_set_size_request (GTK_WIDGET (vbox), 175, -1);
+ gtk_widget_show_all (vbox);
}
@@ -725,7 +719,7 @@
NULL
};
- result = g_type_register_static (GTK_TYPE_VBOX,
+ result = g_type_register_static (GTK_TYPE_VPANED,
"ChatArea",
&info, (GTypeFlags) 0);
}
Modified: trunk/lib/engine/gui/gtk-frontend/chat-area.h
==============================================================================
--- trunk/lib/engine/gui/gtk-frontend/chat-area.h (original)
+++ trunk/lib/engine/gui/gtk-frontend/chat-area.h Mon Aug 18 20:04:15 2008
@@ -50,14 +50,14 @@
struct _ChatArea
{
- GtkVBox parent;
+ GtkVPaned parent;
ChatAreaPrivate* priv;
};
struct _ChatAreaClass
{
- GtkVBoxClass parent;
+ GtkVPanedClass parent;
/* this is the "message-notice-event" signal */
void (*message_notice_event) (ChatArea* self);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]