File: deskno.c

package info (click to toggle)
fbpanel 4.3-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 544 kB
  • ctags: 985
  • sloc: ansic: 7,668; makefile: 204; sh: 48
file content (105 lines) | stat: -rw-r--r-- 2,260 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
// reused dclock.c and variables from pager.c
// 11/23/04 by cmeury

#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>

#include "panel.h"
#include "misc.h"
#include "plugin.h"

// #define DEBUG
#include "dbg.h"

typedef struct {
    GtkWidget *main;
    GtkWidget *namew;
    GtkTooltips *tip;
} deskno;

static  void
clicked( GtkWidget *widget, gpointer data)
{
    int desknum = get_net_current_desktop();
    int desks = get_net_number_of_desktops();
    int newdesk;

    ENTER;
    if(desknum == (desks - 1))
	newdesk = 0;
    else
	newdesk = desknum + 1;
    g_assert(data != NULL);
    Xclimsg(GDK_ROOT_WINDOW(), a_NET_CURRENT_DESKTOP, newdesk, 0, 0, 0, 0);
    RET();
}



static gint
name_update(GtkWidget *widget, deskno *dc)
{
    char buffer [15];
    int n;
    int desknum = get_net_current_desktop() + 1;

    ENTER;
    n = sprintf(buffer, "<b>%d</b>", desknum);
    gtk_label_set_markup (GTK_LABEL(dc->namew), buffer) ;
    RET(TRUE);
}


static int
deskno_constructor(plugin *p)
{
    deskno *dc;
    GtkWidget *button;
    
    ENTER;
    dc = g_new0(deskno, 1);
    g_return_val_if_fail(dc != NULL, 0);
    p->priv = dc;
    
    dc->main = gtk_event_box_new();
    dc->tip  = gtk_tooltips_new();
    button = gtk_button_new();
    gtk_button_set_relief(GTK_BUTTON(button),GTK_RELIEF_NONE);
    g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (clicked), (gpointer) dc);
    dc->namew = gtk_label_new("ww");
    gtk_container_add(GTK_CONTAINER(button), dc->namew);
    gtk_container_add(GTK_CONTAINER(p->pwid), button);
    gtk_widget_show_all(p->pwid);
    name_update(button, dc);
    g_signal_connect (G_OBJECT (fbev), "current_desktop", G_CALLBACK (name_update), (gpointer) dc);
    RET(1);


}


static void
deskno_destructor(plugin *p)
{
  deskno *dc = (deskno *)p->priv;

  ENTER;
  dc = (deskno *) p->priv;
  g_signal_handlers_disconnect_by_func(G_OBJECT (fbev), name_update, dc); 
  g_free(dc);
  RET();
}

plugin_class deskno_plugin_class = {
    fname: NULL,
    count: 0,

    type : "deskno",
    name : "Desktop No / Workspace Name",
    version: "0.6",
    description : "Display workspace number, by cmeury@users.sf.net",

    constructor : deskno_constructor,
    destructor  : deskno_destructor,
};