char * egg_tray_manager_get_child_title (EggTrayManager *manager, EggTrayManagerChild *child) { Window *child_window; Atom utf8_string, atom, type; int result; char *retval; int format; gulong nitems; gulong bytes_after; guchar *val; g_return_val_if_fail (EGG_IS_TRAY_MANAGER (manager), NULL); g_return_val_if_fail (GTK_IS_SOCKET (child), NULL); child_window = g_object_get_data (G_OBJECT (child), "egg-tray-child-window"); utf8_string = XInternAtom (gdk_helper_display(), "UTF8_STRING", False); atom = XInternAtom (gdk_helper_display(), "_NET_WM_NAME", False); gdk_error_trap_push (); result = XGetWindowProperty (gdk_helper_display(), *child_window, atom, 0, G_MAXLONG, False, utf8_string, &type, &format, &nitems, &bytes_after, (guchar **)&val); if (gdk_error_trap_pop () || result != Success) return NULL; if (type != utf8_string || format != 8 || nitems == 0) { if (val) XFree (val); return NULL; } if (!g_utf8_validate ((const gchar*) val, nitems, NULL)) { XFree (val); return NULL; } retval = g_strndup ((const gchar*) val, nitems); XFree (val); return retval; }
static void panel_set_wm_strut(panel *p) { unsigned long data[12] = {0,0,0,0,0,0,0,0,0,0,0,0}; int i = 4; ENTER; if (!GTK_WIDGET_MAPPED (p->topgwin)) return; switch (p->edge) { case EDGE_LEFT: i = 0; data[i] = p->aw; data[4 + i*2] = p->ay; data[5 + i*2] = p->ay + p->ah - 1; break; case EDGE_RIGHT: i = 1; data[i] = p->aw; data[4 + i*2] = p->ay; data[5 + i*2] = p->ay + p->ah - 1; break; case EDGE_TOP: i = 2; data[i] = p->ah; data[4 + i*2] = p->ax; data[5 + i*2] = p->ax + p->aw - 1; break; case EDGE_BOTTOM: i = 3; data[i] = p->ah; data[4 + i*2] = p->ax; data[5 + i*2] = p->ax + p->aw - 1 ; break; default: ERR("wrong edge %d. strut won't be set\n", p->edge); RET(); } DBG("type %d. width %d. from %d to %d\n", i, data[i], data[4 + i*2], data[5 + i*2]); XChangeProperty(gdk_helper_display(), p->topxwin, a_NET_WM_STRUT_PARTIAL, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) data, 12); /* old spec, for wms that do not support STRUT_PARTIAL */ XChangeProperty(gdk_helper_display(), p->topxwin, a_NET_WM_STRUT, XA_CARDINAL, 32, PropModeReplace, (unsigned char *) data, 4); RET(); }
void handle_error(Display * d, XErrorEvent * ev) { char buf[256]; ENTER; XGetErrorText(gdk_helper_display(), ev->error_code, buf, 256); ERR( "trayer : X error: %s\n", buf); RET(); }
void panel_stop(panel *p) { ENTER; tray_destructor(p); XSelectInput (gdk_helper_display(), GDK_ROOT_WINDOW(), NoEventMask); gdk_window_remove_filter(gdk_get_default_root_window (), (GdkFilterFunc)panel_wm_events, p); gtk_widget_destroy(p->topgwin); RET(); }
void * get_xaproperty (Window win, Atom prop, Atom type, int *nitems) { Atom type_ret; int format_ret; unsigned long items_ret; unsigned long after_ret; unsigned char *prop_data; ENTER; prop_data = NULL; XGetWindowProperty (gdk_helper_display(), win, prop, 0, 0x7fffffff, False, type, &type_ret, &format_ret, &items_ret, &after_ret, &prop_data); if (nitems) *nitems = items_ret; RET(prop_data); }
void Xclimsg(Window win, long type, long l0, long l1, long l2, long l3, long l4) { XClientMessageEvent xev; xev.type = ClientMessage; xev.window = win; xev.message_type = type; xev.format = 32; xev.data.l[0] = l0; xev.data.l[1] = l1; xev.data.l[2] = l2; xev.data.l[3] = l3; xev.data.l[4] = l4; XSendEvent(gdk_helper_display(), GDK_ROOT_WINDOW(), False, (SubstructureNotifyMask | SubstructureRedirectMask), (XEvent *) & xev); }
char * get_textproperty(Window win, Atom atom) { XTextProperty text_prop; char *retval; ENTER; if (XGetTextProperty(gdk_helper_display(), win, &text_prop, atom)) { DBG("format=%d enc=%d nitems=%d value=%s \n", text_prop.format, text_prop.encoding, text_prop.nitems, text_prop.value); retval = text_property_to_utf8 (&text_prop); if (text_prop.nitems > 0) XFree (text_prop.value); RET(retval); } RET(NULL); }
void resolve_atoms() { ENTER; a_UTF8_STRING = XInternAtom(gdk_helper_display(), "UTF8_STRING", False); a_XROOTPMAP_ID = XInternAtom(gdk_helper_display(), "_XROOTPMAP_ID", False); a_WM_STATE = XInternAtom(gdk_helper_display(), "WM_STATE", False); a_WM_CLASS = XInternAtom(gdk_helper_display(), "WM_CLASS", False); a_NET_WORKAREA = XInternAtom(gdk_helper_display(), "_NET_WORKAREA", False); a_NET_CLIENT_LIST = XInternAtom(gdk_helper_display(), "_NET_CLIENT_LIST", False); a_NET_CLIENT_LIST_STACKING = XInternAtom(gdk_helper_display(), "_NET_CLIENT_LIST_STACKING", False); a_NET_NUMBER_OF_DESKTOPS = XInternAtom(gdk_helper_display(), "_NET_NUMBER_OF_DESKTOPS", False); a_NET_CURRENT_DESKTOP = XInternAtom(gdk_helper_display(), "_NET_CURRENT_DESKTOP", False); a_NET_DESKTOP_NAMES = XInternAtom(gdk_helper_display(), "_NET_DESKTOP_NAMES", False); a_NET_ACTIVE_WINDOW = XInternAtom(gdk_helper_display(), "_NET_ACTIVE_WINDOW", False); a_NET_WM_DESKTOP = XInternAtom(gdk_helper_display(), "_NET_WM_DESKTOP", False); a_NET_WM_STATE = XInternAtom(gdk_helper_display(), "_NET_WM_STATE", False); a_NET_WM_STATE_SKIP_TASKBAR = XInternAtom(gdk_helper_display(), "_NET_WM_STATE_SKIP_TASKBAR", False); a_NET_WM_STATE_SKIP_PAGER = XInternAtom(gdk_helper_display(), "_NET_WM_STATE_SKIP_PAGER", False); a_NET_WM_STATE_STICKY = XInternAtom(gdk_helper_display(), "_NET_WM_STATE_STICKY", False); a_NET_WM_STATE_HIDDEN = XInternAtom(gdk_helper_display(), "_NET_WM_STATE_HIDDEN", False); a_NET_WM_STATE_SHADED = XInternAtom(gdk_helper_display(), "_NET_WM_STATE_SHADED", False); a_NET_WM_WINDOW_TYPE = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE", False); a_NET_WM_WINDOW_TYPE_DESKTOP = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE_DESKTOP", False); a_NET_WM_WINDOW_TYPE_DOCK = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE_DOCK", False); a_NET_WM_WINDOW_TYPE_TOOLBAR = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE_TOOLBAR", False); a_NET_WM_WINDOW_TYPE_MENU = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE_MENU", False); a_NET_WM_WINDOW_TYPE_UTILITY = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE_UTILITY", False); a_NET_WM_WINDOW_TYPE_SPLASH = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE_SPLASH", False); a_NET_WM_WINDOW_TYPE_DIALOG = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE_DIALOG", False); a_NET_WM_WINDOW_TYPE_NORMAL = XInternAtom(gdk_helper_display(), "_NET_WM_WINDOW_TYPE_NORMAL", False); a_NET_WM_DESKTOP = XInternAtom(gdk_helper_display(), "_NET_WM_DESKTOP", False); a_NET_WM_NAME = XInternAtom(gdk_helper_display(), "_NET_WM_NAME", False); a_NET_WM_STRUT = XInternAtom(gdk_helper_display(), "_NET_WM_STRUT", False); a_NET_WM_STRUT_PARTIAL = XInternAtom(gdk_helper_display(), "_NET_WM_STRUT_PARTIAL", False); a_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR = XInternAtom(gdk_helper_display(), "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False); RET(); }
void panel_start_gui(panel *p) { ENTER; //gtk_rc_parse_string(transparent_rc); p->topgwin = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_container_set_border_width(GTK_CONTAINER(p->topgwin), 0); gtk_window_set_resizable(GTK_WINDOW(p->topgwin), FALSE); gtk_window_set_wmclass(GTK_WINDOW(p->topgwin), "panel", "trayer"); gtk_window_set_title(GTK_WINDOW(p->topgwin), "panel"); gtk_window_set_position(GTK_WINDOW(p->topgwin), GTK_WIN_POS_CENTER); g_signal_connect ( G_OBJECT(p->topgwin) , "delete-event" , G_CALLBACK(panel_delete_event) , p); g_signal_connect ( G_OBJECT(p->topgwin) , "destroy-event", G_CALLBACK(panel_destroy_event), p); g_signal_connect ( G_OBJECT (p->topgwin), "size-request" , G_CALLBACK(panel_size_req) , p); g_signal_connect ( G_OBJECT (p->topgwin), "size-allocate", G_CALLBACK(panel_size_alloc), p); if (p->transparent) { g_signal_connect (G_OBJECT (p->topgwin), "configure-event", G_CALLBACK(panel_configure_event), p); g_signal_connect (G_OBJECT (p->topgwin), "style-set", G_CALLBACK( panel_style_set), p); } if (p->on_primary) { GdkDisplay *display = gdk_display_get_default (); GdkScreen *screen = gdk_display_get_screen(display, 0); g_signal_connect ( screen, "monitors-changed", G_CALLBACK(panel_monitors_changed), (gpointer)p ); p->monitor = gdk_screen_get_primary_monitor(screen); } gtk_widget_realize(p->topgwin); gdk_window_set_decorations(p->topgwin->window, 0); gtk_widget_set_app_paintable(p->topgwin, TRUE); p->lbox = p->my_box_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(p->lbox), 0); gtk_container_add(GTK_CONTAINER(p->topgwin), p->lbox); gtk_widget_show(p->lbox); if (p->allign == ALLIGN_RIGHT) { GtkWidget * expander = p->my_box_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(p->lbox), expander, TRUE, TRUE, 0); gtk_widget_show(expander); } p->box = p->my_box_new(FALSE, 1); gtk_container_set_border_width(GTK_CONTAINER(p->box), 1); gtk_box_pack_start(GTK_BOX(p->lbox), p->box, FALSE, TRUE, padding); gtk_widget_show(p->box); // get properties on topgwin p->topGdkWindow = gtk_widget_get_window(p->topgwin); p->topxwin = GDK_WINDOW_XWINDOW(GTK_WIDGET(p->topgwin)->window); bg_init(gdk_helper_display()); /* make our window unfocusable */ gdk_window_set_accept_focus(p->topGdkWindow,False); if (p->setdocktype) { gdk_window_set_type_hint(p->topGdkWindow,GDK_WINDOW_TYPE_HINT_DOCK); } Xclimsg(p->topxwin, a_NET_WM_DESKTOP, 0xFFFFFFFF, 0, 0, 0, 0); /************************/ /* Window Mapping Point */ gtk_widget_show_all(p->topgwin); Xclimsg(p->topxwin, a_NET_WM_DESKTOP, 0xFFFFFFFF, 0, 0, 0, 0); gdk_window_stick ( p->topGdkWindow); gdk_window_set_skip_pager_hint ( p->topGdkWindow, True ); gdk_window_set_skip_taskbar_hint ( p->topGdkWindow, True ); XSelectInput (gdk_helper_display(), GDK_ROOT_WINDOW(), PropertyChangeMask); XSelectInput (gdk_helper_display(), p->topxwin, PropertyChangeMask | FocusChangeMask | StructureNotifyMask); gdk_window_add_filter(gdk_get_default_root_window (), (GdkFilterFunc)panel_wm_events, p); calculate_position(p, distance,distancefrom); gdk_window_move_resize(p->topgwin->window, p->ax, p->ay, p->aw, p->ah); if (p->setstrut) panel_set_wm_strut(p); if (p->lower) XLowerWindow(gdk_helper_display(), p->topxwin); RET(); }