LINUX.ORG.RU

Посылка даных окну


0

0

Привет программерам. Помогите пожалуйста начинающему. Вот код ========================================= //функция получения активного окна Window get_active_window (Display *disp) { Atom type; int format; unsigned long nitems; unsigned long bytes_after; unsigned char *data; int result; Window win=None; gint err; Atom net_active_window;

type = None;

net_active_window= XInternAtom(disp, "_NET_ACTIVE_WINDOW", False);

gdk_error_trap_push(); result = XGetWindowProperty (disp, DefaultRootWindow(disp), net_active_window, 0, 0x7fffffff, False,XA_WINDOW, &type, &format, &nitems, &bytes_after, &data);

err=gdk_error_trap_pop();

if (err!=0 || result != Success) { printf("err!=0 || result != Success\n"); return None; }

if (type != XA_WINDOW) { printf("type != XA_WINDOW\n"); XFree (data); return None; } if (data) { printf("data\n"); win= *((Window *) data); XFree (data); }

return win; } // функция посылки кода нажатой клавиши активному окну

int send_key_to_win (Window wind, KeyCode keycode, int keycode_modifiers) { int err = 0; XKeyEvent kevent;

if (!wind) { printf("Not window\n"); return -1; }

kevent.display = gdk_x11_get_default_xdisplay(); kevent.window = wind; kevent.root = gdk_x11_get_default_root_xwindow(); kevent.subwindow = None; kevent.time = CurrentTime; kevent.x = 1; kevent.y = 1; kevent.x_root = 1; kevent.y_root = 1; kevent.same_screen = TRUE; kevent.type = KeyPress; kevent.keycode = keycode; kevent.state = keycode_modifiers;

err=XSendEvent(gdk_x11_get_default_xdisplay()/*GDK_DISPLAY ()*/,wind, TRUE, KeyPressMask, (XEvent *)&kevent);

XSync(gdk_x11_get_default_xdisplay(), True);

return err; }

=========================================== так вот проблема в том что код посылается только окнам програм от любых менеджеров окон кроме KDE. Например: хочу послать некоторый текст текстовому редактору и с помошью етих функций мне получается вставить текст ис своей програмы в такие редакторы как gedit, emacs и openoffice writer и др. А вот в такие редакторы как kedit и koffice вставить не получается. Подскажите плиз как ето решить.

anonymous

1. Там внизу (прямо под окошком ввода текста) кнопочка есть, по умолчанию "TeX paragraphs w/quoting". Когда ты посылаешь код, пожалуйста, перещелкни ее на "Preformatted text".

2. Я не спец в Кедах, но вот что заметил: КДЕшный WM на каждый чих сыплет десятком ненужных событий. Попытки "цивилизованной" работы с ним обречены: например, клик мышой по декарации там генерит десяток событий, из которых только последнее осмысленно.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

//функция получения активного окна
Window get_active_window (Display *disp)
{
 Atom type;
 int format;
 unsigned long nitems;
 unsigned long bytes_after;
 unsigned char *data;
 int result;
 Window win=None;
 gint err;
 Atom net_active_window;

 type = None;

 net_active_window= XInternAtom(disp, "_NET_ACTIVE_WINDOW", False);

 gdk_error_trap_push();
 result = XGetWindowProperty (disp, DefaultRootWindow(disp), net_active_window, 0, 0x7fffffff, False,XA_WINDOW, &type, &format, &nitems, &bytes_after, &data);

 err=gdk_error_trap_pop();

 if (err!=0 || result != Success) { printf("err!=0 || result != Success\n"); return None; }

 if (type != XA_WINDOW) { printf("type != XA_WINDOW\n"); XFree (data); return None; } if (data) { printf("data\n"); win= *((Window *) data); XFree (data); }

  return win;
}
// функция посылки кода нажатой клавиши активному окну

int send_key_to_win (Window wind, KeyCode keycode, int keycode_modifiers)
{ 
  int err = 0;
  XKeyEvent kevent;

   if (!wind) { printf("Not window\n"); return -1; }

   kevent.display = gdk_x11_get_default_xdisplay();
   kevent.window = wind;
   kevent.root = gdk_x11_get_default_root_xwindow();
   kevent.subwindow = None;
   kevent.time = CurrentTime;
   kevent.x = 1;
   kevent.y = 1;
   kevent.x_root = 1;
   kevent.y_root = 1;
   kevent.same_screen = TRUE;
   kevent.type = KeyPress;
   kevent.keycode = keycode;
   kevent.state = keycode_modifiers;

   err=XSendEvent(gdk_x11_get_default_xdisplay(),wind, TRUE, KeyPressMask, (XEvent *)&kevent);

   XSync(gdk_x11_get_default_xdisplay(), True);

  return err;
}
--------------------------------------------------------------------
Но программы gedit, openoffice я запускаю в КДЕ и с ними удается работать а ис кде-шными  нет. Неужели нет никакого способа заставить его принимать события от моей программы?

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