~jconti/recent-notifications/trunk

« back to all changes in this revision

Viewing changes to indicator/example.c

  • Committer: Jason Conti
  • Date: 2011-03-26 21:20:00 UTC
  • Revision ID: jason.conti@gmail.com-20110326212000-48rj1zased29tne4
Ported Notification.py to gobject introspection, everything except dbus. Going to attempt that next, but may revert if it doesn't work so well yet.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <stdio.h>
 
2
#include <gtk/gtk.h>
 
3
 
 
4
static gboolean button_press(GtkWidget *widget, GdkEvent *event)
 
5
{
 
6
  GdkEventButton *button_event;
 
7
 
 
8
  if(event->type == GDK_BUTTON_PRESS) {
 
9
    button_event = (GdkEventButton *)event;
 
10
    gtk_menu_popup(GTK_MENU(widget), NULL, NULL, NULL, NULL, 
 
11
        button_event->button, button_event->time);
 
12
    return TRUE;
 
13
  }
 
14
 
 
15
  return FALSE;
 
16
}
 
17
 
 
18
static GtkWidget *create_message_item(const char *summary, const char *body,
 
19
    const char *timestamp, const char *app_name, const char *icon_name)
 
20
{
 
21
  GtkWidget *menu_item;
 
22
  GtkWidget *hbox;
 
23
  GtkWidget *image;
 
24
  GtkWidget *label;
 
25
  char buffer[1024];
 
26
 
 
27
  menu_item = gtk_menu_item_new();
 
28
 
 
29
  sprintf(buffer, "<b>%s</b>\n%s\n<small><i>%s from <b>%s</b></i></small>", summary,
 
30
      body, timestamp, app_name);
 
31
 
 
32
  image = gtk_image_new_from_icon_name(icon_name, GTK_ICON_SIZE_DIALOG);
 
33
  gtk_widget_show(image);
 
34
 
 
35
  label = gtk_label_new(NULL);
 
36
  gtk_label_set_markup(GTK_LABEL(label), buffer);
 
37
  gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
 
38
  gtk_widget_show(label);
 
39
 
 
40
  hbox = gtk_hbox_new(FALSE, 0);
 
41
  gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 15);
 
42
  gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);
 
43
  gtk_container_add(GTK_CONTAINER(menu_item), hbox);
 
44
  gtk_widget_show(hbox);
 
45
 
 
46
  gtk_widget_show(menu_item);
 
47
 
 
48
  return menu_item;
 
49
}
 
50
 
 
51
int main(int argc, char *argv[])
 
52
{
 
53
  GtkWidget *window;
 
54
  GtkWidget *menu;
 
55
  GtkWidget *menu_items;
 
56
  GtkWidget *vbox;
 
57
  GtkWidget *button;
 
58
 
 
59
  gtk_init(&argc, &argv);
 
60
 
 
61
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
62
  gtk_widget_set_size_request(window, 200, 100);
 
63
  gtk_window_set_title(GTK_WINDOW(window), "Menu Example");
 
64
  gtk_container_set_border_width(GTK_CONTAINER(window), 10);
 
65
 
 
66
  g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(gtk_main_quit), NULL);
 
67
 
 
68
  menu = gtk_menu_new();
 
69
  
 
70
  menu_items = create_message_item("Your Friend", "I just wanted to say hello.",
 
71
      "2 minutes ago", "Pidgin", "pidgin");
 
72
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_items);
 
73
 
 
74
  menu_items = create_message_item("Some Guy", "I had cake for lunch #cakelunchie",
 
75
      "1 hour ago", "Gwibber", "gwibber");
 
76
  gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_items);
 
77
 
 
78
  vbox = gtk_vbox_new(FALSE, 0);
 
79
  gtk_container_add(GTK_CONTAINER(window), vbox);
 
80
  gtk_widget_show(vbox);
 
81
 
 
82
  button = gtk_button_new_with_label("Example");
 
83
  g_signal_connect_swapped(G_OBJECT(button), "event", G_CALLBACK(button_press), G_OBJECT(menu));
 
84
  gtk_box_pack_start(GTK_BOX(vbox), button, TRUE, TRUE, 0);
 
85
  gtk_widget_show(button);
 
86
 
 
87
  gtk_widget_show(window);
 
88
 
 
89
  gtk_main();
 
90
 
 
91
  return 0;
 
92
}