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 #include "internal.h"
7 #include "settings.h"
8 
9 #if GTK_MAJOR_VERSION == 2
10 #include "gtk2-compat.h"
11 #endif
12 
13 girara_statusbar_item_t*
14 girara_statusbar_item_add(girara_session_t* session, bool expand, bool fill, bool left, girara_statusbar_event_t callback)
15 {
16  g_return_val_if_fail(session != NULL && session->elements.statusbar_items, FALSE);
17 
18  girara_statusbar_item_t* item = g_slice_new(girara_statusbar_item_t);
19 
20  item->box = gtk_event_box_new();
21  item->text = GTK_LABEL(gtk_label_new(NULL));
22 
23  /* set style */
24  gtk_widget_override_background_color(GTK_WIDGET(item->box), GTK_STATE_NORMAL, &(session->style.statusbar_background));
25  gtk_widget_override_color(GTK_WIDGET(item->box), GTK_STATE_NORMAL, &(session->style.statusbar_foreground));
26  gtk_widget_override_background_color(GTK_WIDGET(item->text), GTK_STATE_NORMAL, &(session->style.statusbar_background));
27  gtk_widget_override_color(GTK_WIDGET(item->text), GTK_STATE_NORMAL, &(session->style.statusbar_foreground));
28 
29  gtk_widget_override_font(GTK_WIDGET(item->text), session->style.font);
30 
31  /* set properties */
32  gtk_misc_set_alignment(GTK_MISC(item->text), left ? 0.0 : 1.0, 0.5);
33  gtk_label_set_use_markup(item->text, TRUE);
34 
35 #if (GTK_MAJOR_VERSION == 3)
36  /* add name so it uses a custom style */
37  gtk_widget_set_name(GTK_WIDGET(item->text), "bottom_box");
38 #else
39  /* set padding */
40  guint ypadding = 2; /* total amount of padding (top + bottom) */
41  guint xpadding = 8; /* total amount of padding (left + right) */
42  girara_setting_get(session, "statusbar-h-padding", &xpadding);
43  girara_setting_get(session, "statusbar-v-padding", &ypadding);
44 
45  gtk_misc_set_padding(GTK_MISC(item->text), xpadding/2, ypadding/2);
46 #endif
47 
48  if (callback != NULL) {
49  g_signal_connect(G_OBJECT(item->box), "button-press-event", G_CALLBACK(callback), session);
50  }
51 
52  /* add it to the list */
53  gtk_container_add(GTK_CONTAINER(item->box), GTK_WIDGET(item->text));
54  gtk_box_pack_start(session->gtk.statusbar_entries, GTK_WIDGET(item->box), expand, fill, 2);
55  gtk_widget_show_all(GTK_WIDGET(item->box));
56 
57  girara_list_prepend(session->elements.statusbar_items, item);
58  return item;
59 }
60 
61 void
62 girara_statusbar_item_free(girara_statusbar_item_t* item)
63 {
64  g_slice_free(girara_statusbar_item_t, item);
65 }
66 
67 bool
68 girara_statusbar_item_set_text(girara_session_t* session, girara_statusbar_item_t* item, const char* text)
69 {
70  g_return_val_if_fail(session != NULL, false);
71  g_return_val_if_fail(item != NULL, false);
72 
73  char* escaped_text = g_markup_escape_text(text, -1);
74  gtk_label_set_markup((GtkLabel*) item->text, escaped_text);
75  g_free(escaped_text);
76 
77  return true;
78 }
79 
80 bool
81 girara_statusbar_item_set_foreground(girara_session_t* session, girara_statusbar_item_t* item, const char* color)
82 {
83  g_return_val_if_fail(session != NULL, false);
84  g_return_val_if_fail(item != NULL, false);
85 
86 #if (GTK_MAJOR_VERSION == 3)
87  GdkRGBA gdk_color;
88  gdk_rgba_parse(&gdk_color, color);
89  gtk_widget_override_color(GTK_WIDGET(session->gtk.inputbar_entry),
90  GTK_STATE_NORMAL, &(session->style.inputbar_foreground));
91 #else
92  GdkColor gdk_color;
93  gdk_color_parse(color, &gdk_color);
94  gtk_widget_modify_fg(GTK_WIDGET(item->text), GTK_STATE_NORMAL, &gdk_color);
95 #endif
96 
97  return true;
98 }
99 
100 bool
101 girara_statusbar_set_background(girara_session_t* session, const char* color)
102 {
103  g_return_val_if_fail(session != NULL, false);
104 
105  GdkRGBA gdk_color;
106  gdk_rgba_parse(&gdk_color, color);
107  gtk_widget_override_background_color(GTK_WIDGET(session->gtk.statusbar), GTK_STATE_NORMAL, &gdk_color);
108 
109  return true;
110 }
bool(* girara_statusbar_event_t)(GtkWidget *widget, GdkEvent *event, girara_session_t *session)
Definition: statusbar.h:18
bool girara_statusbar_item_set_text(girara_session_t *session, girara_statusbar_item_t *item, const char *text)
Definition: statusbar.c:68
girara_session_t * session
Definition: tabs.c:263
HIDDEN void girara_statusbar_item_free(girara_statusbar_item_t *statusbaritem)
Definition: statusbar.c:62
bool girara_statusbar_item_set_foreground(girara_session_t *session, girara_statusbar_item_t *item, const char *color)
Definition: statusbar.c:81
bool girara_statusbar_set_background(girara_session_t *session, const char *color)
Definition: statusbar.c:101
bool girara_setting_get(girara_session_t *session, const char *name, void *dest)
Definition: settings.c:140
void girara_list_prepend(girara_list_t *list, void *data)
girara_statusbar_item_t * girara_statusbar_item_add(girara_session_t *session, bool expand, bool fill, bool left, girara_statusbar_event_t callback)
Definition: statusbar.c:14
g_return_val_if_fail(button!=NULL, false)