LINUX.ORG.RU

Иконку в трей


0

0

Ладно... про готовое не отвечают...

Дайте пример (я думаю, что они должны существовать) минимальной программы, которая делает иконку как у GAIM'a.

Буду индикатор загрузки проца делать :)

★★★★

Ответ на: комментарий от fk0

В винде это называлось system tray. Как это правильно в линуксе я не знаю.

В общем куда GAIM пихает свою иконку туда и нужно. :)

В fluxbox-е это выглядит очень мило :)

alexru ★★★★
() автор топика
Ответ на: комментарий от Pi

По мсдну скучается :)

Я привык когда есть готовый, компилируемый пример, чтобы скомпилировалось за 5 минут, запустилось и потом менять и можифицировать все.

Так вот. :)

alexru ★★★★
() автор топика
Ответ на: комментарий от alexru

include <X11/Xlib.h>  
#include <X11/Xatom.h>  
#include <X11/Xutil.h>  


#include <cstdlib> 
#include <iostream> 
using namespace std;


int main(){

    Display * dpy = XOpenDisplay(getenv("DISPLAY"));
    Atom atom = XInternAtom(dpy, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False);

    Window base_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), 100, 100, 100, 100, 0, 0,
    Window tray_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), 10, 10, 10, 10, 0, 0, 0);


    XSelectInput(dpy, tray_window,
                 ButtonPressMask
                 | ButtonReleaseMask
                 | PointerMotionMask
                 | ExposureMask
                 | EnterWindowMask
                 | LeaveWindowMask
                 | KeyPressMask
                 | KeyReleaseMask
                 );


    XChangeProperty(dpy, tray_window, atom, XA_WINDOW, 32, PropModeAppend,
    (unsigned char *) &base_window, 1);

    XMapWindow(dpy, tray_window);

    XEvent ev;

    /* infinite event loop */
    for (;;){

        do
        {
            do
            {
                XNextEvent(dpy, &ev);


            }
            while (XPending(dpy));


            /*  
                after mouse click on the our window Xserver sends us a 'LeaveNotify'  
                event and after 'EnterNotify' event. Some times this events arrive  
                to ipager with an interval which leads the end of XPending cycle  
                and 'createIcon' method are called. But in the next cycle ipager get  
                a 'EnterNotify' event and icons are created again.  
                This brings icons twinkling.  
                To avoid this do a short pause.  
  
                nano: 0,000000001 sec  
  
            */
            timespec t, tr;
            t.tv_sec  = 0;
            t.tv_nsec = 100000;
            nanosleep(&t, &tr);

        }
            while (XPending(dpy));


            /*  
                after mouse click on the our window Xserver sends us a 'LeaveNotify'  
                event and after 'EnterNotify' event. Some times this events arrive  
                to ipager with an interval which leads the end of XPending cycle  
                and 'createIcon' method are called. But in the next cycle ipager get  
                a 'EnterNotify' event and icons are created again.  
                This brings icons twinkling.  
                To avoid this do a short pause.  
  
                nano: 0,000000001 sec  
  
            */
            timespec t, tr;
            t.tv_sec  = 0;
            t.tv_nsec = 100000;
            nanosleep(&t, &tr);

        }
        while (XPending(dpy));

    }





    return 0;
}


$ g++ -lX11 file


anonymous
()
Ответ на: комментарий от anonymous

Коряво скопировал.
еще раз:


#include <X11/Xlib.h>  
#include <X11/Xatom.h>  
#include <X11/Xutil.h>  


#include <cstdlib> 
#include <iostream> 
using namespace std;


int main(){

    Display * dpy = XOpenDisplay(getenv("DISPLAY"));
    Atom atom = XInternAtom(dpy, "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR", False);

    Window base_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), 100, 100, 100, 100, 0, 0, 0);
    Window tray_window = XCreateSimpleWindow(dpy, XDefaultRootWindow(dpy), 10, 10, 10, 10, 0, 0, 0);


    XSelectInput(dpy, tray_window,
                 ButtonPressMask
                 | ButtonReleaseMask
                 | PointerMotionMask
                 | ExposureMask
                 | EnterWindowMask
                 | LeaveWindowMask
                 | KeyPressMask
                 | KeyReleaseMask
                 );


    XChangeProperty(dpy, tray_window, atom, XA_WINDOW, 32, PropModeAppend,
    (unsigned char *) &base_window, 1);

    XMapWindow(dpy, tray_window);



    XEvent ev;
    /* infinite event loop */
    for (;;){

        do
        {
            do
            {
                  XNextEvent(dpy, &ev);


            }
            while (XPending(dpy));


            /*  
                after mouse click on the our window Xserver sends us a 'LeaveNotify'  
                event and after 'EnterNotify' event. Some times this events arrive  
                to ipager with an interval which leads the end of XPending cycle  
                and 'createIcon' method are called. But in the next cycle ipager get  
                a 'EnterNotify' event and icons are created again.  
                This brings icons twinkling.  
                To avoid this do a short pause.  
  
                nano: 0,000000001 sec  
  
            */
            timespec t, tr;
            t.tv_sec  = 0;
            t.tv_nsec = 100000;
            nanosleep(&t, &tr);

        }
        while (XPending(dpy));

    }





    return 0;
}


anonymous
()
Ответ на: комментарий от anonymous

alexru:~/work$ g++ -lX11 tst.c
/usr/bin/ld: cannot find -lX11
collect2: ld returned 1 exit status


все заголовочные файлы стоят. библиотека libX11 есть

alexru ★★★★
() автор топика
Ответ на: комментарий от fk0

> > _KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR 
>   ^^^^ ну-ну...

И?
автор задавал вопрос применительно к Флюксу. А флюкс поддерживает именно этот атом и гномовский. 

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.