~jconti/recent-notifications/trunk

« back to all changes in this revision

Viewing changes to indicator-notify/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
 
}