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 girara_statusbar_item_t*
10 girara_statusbar_item_add(girara_session_t* session, bool expand, bool fill, bool left, girara_statusbar_event_t callback)
11 {
12  g_return_val_if_fail(session != NULL && session->elements.statusbar_items, FALSE);
13 
14  girara_statusbar_item_t* item = g_slice_new(girara_statusbar_item_t);
15 
16  item->box = gtk_event_box_new();
17  item->text = GTK_LABEL(gtk_label_new(NULL));
18 
19  /* set style */
20  widget_add_class(GTK_WIDGET(item->box), "statusbar");
21  widget_add_class(GTK_WIDGET(item->text), "statusbar");
22 
23  /* set properties */
24  gtk_widget_set_halign(GTK_WIDGET(item->text), left ? GTK_ALIGN_START : GTK_ALIGN_END);
25  gtk_widget_set_valign(GTK_WIDGET(item->text), GTK_ALIGN_CENTER);
26  gtk_label_set_use_markup(item->text, TRUE);
27 
28  /* add ellipsis if item is on the left side */
29  if (left == true) {
30  gtk_label_set_ellipsize(item->text, PANGO_ELLIPSIZE_END);
31  }
32 
33  /* add name so it uses a custom style */
34  gtk_widget_set_name(GTK_WIDGET(item->text), "bottom_box");
35 
36  if (callback != NULL) {
37  g_signal_connect(G_OBJECT(item->box), "button-press-event", G_CALLBACK(callback), session);
38  }
39 
40  /* add it to the list */
41  gtk_container_add(GTK_CONTAINER(item->box), GTK_WIDGET(item->text));
42  gtk_box_pack_start(session->gtk.statusbar_entries, GTK_WIDGET(item->box), expand, fill, 0);
43  gtk_widget_show_all(GTK_WIDGET(item->box));
44 
45  girara_list_prepend(session->elements.statusbar_items, item);
46  return item;
47 }
48 
49 void
50 girara_statusbar_item_free(girara_statusbar_item_t* item)
51 {
52  g_slice_free(girara_statusbar_item_t, item);
53 }
54 
55 bool
56 girara_statusbar_item_set_text(girara_session_t* session, girara_statusbar_item_t* item, const char* text)
57 {
58  g_return_val_if_fail(session != NULL, false);
59  g_return_val_if_fail(item != NULL, false);
60 
61  char* escaped_text = g_markup_escape_text(text, -1);
62  gtk_label_set_markup((GtkLabel*) item->text, escaped_text);
63  g_free(escaped_text);
64 
65  return true;
66 }
67 
68 bool
69 girara_statusbar_item_set_foreground(girara_session_t* session, girara_statusbar_item_t* item, const char* color)
70 {
71  g_return_val_if_fail(session != NULL, false);
72  g_return_val_if_fail(item != NULL, false);
73 
74  GdkRGBA gdk_color;
75  gdk_rgba_parse(&gdk_color, color);
76  gtk_widget_override_color(GTK_WIDGET(item->text),
77  GTK_STATE_FLAG_NORMAL, &gdk_color);
78 
79  return true;
80 }
81 
82 bool
83 girara_statusbar_set_background(girara_session_t* session, const char* color)
84 {
85  g_return_val_if_fail(session != NULL, false);
86 
87  GdkRGBA gdk_color;
88  gdk_rgba_parse(&gdk_color, color);
89  gtk_widget_override_background_color(GTK_WIDGET(session->gtk.statusbar),
90  GTK_STATE_FLAG_NORMAL, &gdk_color);
91 
92  return true;
93 }
bool(* girara_statusbar_event_t)(GtkWidget *widget, GdkEvent *event, girara_session_t *session)
Definition: statusbar.h:19
bool girara_statusbar_item_set_text(girara_session_t *session, girara_statusbar_item_t *item, const char *text)
Definition: statusbar.c:56
bool girara_statusbar_item_set_foreground(girara_session_t *session, girara_statusbar_item_t *item, const char *color)
Definition: statusbar.c:69
bool girara_statusbar_set_background(girara_session_t *session, const char *color)
Definition: statusbar.c:83
HIDDEN void widget_add_class(GtkWidget *widget, const char *styleclass)
Definition: utils.c:532
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:10
void girara_statusbar_item_free(girara_statusbar_item_t *item)
Definition: statusbar.c:50