girara
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
statusbar.c
Go to the documentation of this file.
1 /* See LICENSE file for license and copyright information */
2 
3 #include "statusbar.h"
4 #include "session.h"
5 #include "datastructures.h"
6 
7 #if GTK_MAJOR_VERSION == 2
8 #include "gtk2-compat.h"
9 #endif
10 
15 {
16  GtkWidget* box;
17  GtkLabel *text;
18 };
19 
20 girara_statusbar_item_t*
21 girara_statusbar_item_add(girara_session_t* session, bool expand, bool fill, bool left, girara_statusbar_event_t callback)
22 {
23  g_return_val_if_fail(session != NULL && session->elements.statusbar_items, FALSE);
24 
25  girara_statusbar_item_t* item = g_slice_new(girara_statusbar_item_t);
26 
27  item->box = gtk_event_box_new();
28  item->text = GTK_LABEL(gtk_label_new(NULL));
29 
30  /* set style */
31  gtk_widget_override_background_color(GTK_WIDGET(item->box), GTK_STATE_NORMAL, &(session->style.statusbar_background));
32  gtk_widget_override_color(GTK_WIDGET(item->text), GTK_STATE_NORMAL, &(session->style.statusbar_foreground));
33  gtk_widget_override_font(GTK_WIDGET(item->text), session->style.font);
34 
35  /* set properties */
36  gtk_misc_set_alignment(GTK_MISC(item->text), left ? 0.0 : 1.0, 0.0);
37  gtk_misc_set_padding(GTK_MISC(item->text), 2, 4);
38  gtk_label_set_use_markup(item->text, TRUE);
39 
40  if (callback != NULL) {
41  g_signal_connect(G_OBJECT(item->box), "button-press-event", G_CALLBACK(callback), session);
42  }
43 
44  /* add it to the list */
45  gtk_container_add(GTK_CONTAINER(item->box), GTK_WIDGET(item->text));
46  gtk_box_pack_start(session->gtk.statusbar_entries, GTK_WIDGET(item->box), expand, fill, 2);
47  gtk_widget_show_all(GTK_WIDGET(item->box));
48 
49  girara_list_prepend(session->elements.statusbar_items, item);
50  return item;
51 }
52 
53 void
54 girara_statusbar_item_free(girara_statusbar_item_t* item)
55 {
56  g_slice_free(girara_statusbar_item_t, item);
57 }
58 
59 bool
60 girara_statusbar_item_set_text(girara_session_t* session, girara_statusbar_item_t* item, const char* text)
61 {
62  g_return_val_if_fail(session != NULL, false);
63  g_return_val_if_fail(item != NULL, false);
64 
65  char* escaped_text = g_markup_escape_text(text, -1);
66  gtk_label_set_markup((GtkLabel*) item->text, escaped_text);
67  g_free(escaped_text);
68 
69  return true;
70 }
71 
72 bool
73 girara_statusbar_item_set_foreground(girara_session_t* session, girara_statusbar_item_t* item, const char* color)
74 {
75  g_return_val_if_fail(session != NULL, false);
76  g_return_val_if_fail(item != NULL, false);
77 
78  GdkColor gdk_color;
79  gdk_color_parse(color, &gdk_color);
80  gtk_widget_modify_fg(GTK_WIDGET(item->text), GTK_STATE_NORMAL, &gdk_color);
81 
82  return true;
83 }
84 
85 bool
86 girara_statusbar_set_background(girara_session_t* session, const char* color)
87 {
88  g_return_val_if_fail(session != NULL, false);
89 
90  GdkRGBA gdk_color;
91  gdk_rgba_parse(&gdk_color, color);
92  gtk_widget_override_background_color(GTK_WIDGET(session->gtk.statusbar), GTK_STATE_NORMAL, &gdk_color);
93 
94  return true;
95 }
96