LINUX.ORG.RU

gdk_window внешней программы


0

0

Запускаю из своей программы внешнюю программу (конкретно, gnuplot). Например, с помощью system().
Далее, хочу с помощью gdk_window_reparent () переназначить родительсоке окно gnuplot'а ("встроить" его в окно своей программы). Но для этого нужно иметь указатель на gdk-окно, соответствующее gnuplot'у. Вот и вопрос: как этот указатель получить? Может, вызывать gnuplot нужно не через system() ? Или есть ещё какой способ?
Всё сказанное не относится конкретно к gnuplot'у - просто это программа для меня - первая необходимость...

★★

Блин, сказано же было, запускаешь gnuplot с помощью g_spawn_async_with_pipes, далее просто гоняешь данные в две стороны. Окно X-ов получить можно, но толку от этого не будет, да и сложно все это очень.

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

В смысле? Ну, пригнал я данные в свою программу, и как я их выведу? Это надо с postscript'ом или png работать...
А если мне надо 3-х мерный плот повернуть(правой кнопкой мыши на окне гнуплота), то как я это через пайп сделаю?

Round ★★
() автор топика

И поактивнее используй google. Следующий твой поиск по логике должен быть по "gnuplot_i". Возможно это то, что тебе нужно! :)

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

Огромное спасибо за ссылки! Правда, задача пока не решена: дело в том, что написанная мною программа должна работать на машине, на которой я не могу устанавливать/модифицировать софт => я вынужден использовать только чистый gnuplot, gtk и иксы... Так что придётся довольно много написать самому... А для дома, для семьи я, конечно, gnuplot_i поставлю...
Ещё раз спасибо.

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

я не успел зайти на gnuplot_i, но насколько я понял, это и есть некая обвязка вокруг стандартного gnuplot, которая соединение и пересылку осуществляет за тебя через пайпы. Вот выдержка из http://ndevilla.free.fr/gnuplot/

The following module enables sending display requests to a gnuplot session through simple ANSI C calls. This module is placed in the public domain. I do appreciate a mention in your code, documentation, or web pages, if you happen to use this module.

Notice that gnuplot_i talks to a gnuplot process by means of POSIX pipes.

То есть ты с gnuplot_i общаешься через сишные вызовы, а тот в свою очередь через пайп с gnuplot. То есть некая обвязка получается. То есть мне кажется, что gnuplot модифицировать не надо. Но в любом случае скачай исходники gnuplot_i и глянь, как там все сделано.

Zubok ★★★★★
()

вобщем я посмотрел маны - gnuplot 3.7 не поддерживает втраивание своего окна в другое приложение штатными стредствами gnuplot. если тебе не принципиально что гнуплот будет отдельным окном то делай так как тебе посоветовали - соединяй через пайпы.

если же принципиально то ищешь у Х-сервера нужное тебе окно по имени И возможно pid-у преобразовываеш его в ГДК - окно и дальше делаеш с ним что посчитаеш нужным.

наводки xlsclients,xwininfo,xlsatoms, ...

а также порыщ по архиву ету тему не раз carrot && lg обьясняли за что им большое спасибо.

ещё ключевые слова XEmbed _NET_WM XQueryTree

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

>вобщем я посмотрел маны - gnuplot 3.7 не поддерживает втраивание своего окна в другое приложение штатными стредствами gnuplot.

Не путай человека! Все окна в иксах позволяют встраивание через XReparentWindow. Иначе бы window manager не смог бы нарисовать рамку вокруг окна gnuplot.

XEmbed gnuplot действительно не поддерживает, но пока мне представляется, что и без XEmbed можно будет получить нужную функциональность.

Цитата:

The reparenting mechanism works with any client program, whether or not it has knowledge of any specific window manager. In fact, client programs in the X Window system should be written in a manner sufficiently general to accommodate any type of window manager including no window manager at all. Although typically used by the window manager, XReparentWindow is available to all client programs. This is due to the policy that, in X, "a window manager is a client, no different than any other client" A Web browser, for example, could be easily modified to reparent an external application into an embedded sub window

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

>>вобщем я посмотрел маны - gnuplot 3.7 не поддерживает втраивание своего окна в другое приложение штатными стредствами gnuplot.

>Не путай человека! Все окна в иксах позволяют встраивание через XReparentWindow. Иначе бы window manager не смог бы нарисовать рамку вокруг окна gnuplot.

>XEmbed gnuplot действительно не поддерживает, но пока мне представляется, что и без XEmbed можно будет получить нужную функциональность.

Cпасибо! Я и сам здесь немного плаваю, но на текущий момент для него наибольшей проблемой будет получить само иксовое окно а не сделать репарент.

Хотя если человеку нечем занятся то пускай бы добавил XEmbed into gnuplot ;-). это несложно

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

Ну насоветовали :)

Сначала мы окно будем получать по имени, потом пользователь запустит два приложения сразу и будем таскать из одного в другое. А в это время wm будет рисовать рамку у окна, которое мы у него стащили.

Потом пользователь захочет всплывающее меню на графике и цветов побольше. Что тогда делать будем?

Систему строить нужно правильно, а не извращаться.

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

>Сначала мы окно будем получать по имени, потом пользователь запустит два приложения сразу и будем таскать из одного в другое. А в это время wm будет рисовать рамку у окна, которое мы у него стащили.

тоесть wm не будет знать что мы у него спёрли окно???

Я репарент никогда не юзал а упралять чужим окном - управлял.

>Потом пользователь захочет всплывающее меню на графике и цветов побольше. Что тогда делать будем?

Добавлять XEmbed into gnuplot и не заниматся сюксем

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

Кстати, gnuplot для встраиваемых графиков использует ddd, оболочка к gdb. Можно посмотреть, как там делается. Не совсем gtk, но где-то в том направлении.

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