GTK의 GtkWidget *window를 Xlib의 Window *window로 변환하는 법 없나요?

lobin2의 이미지

리눅스 X-Window프로그래밍을 접하는 초보입니다.
자료를 구할데가 없는데... KLDP에서 많은 도움 얻어 갑니다. ^^

Xlib를 써서 프로그램을 구현하다가, GTK를 써서 프로그램을 짜는게 더 효율적이라 생각되어서 지금까지 Xlib로 개발했던 프로그램을
포팅하려고 합니다....

GtkWidget *window 변수를 Xlib의 Window *window로 변환을 해야 되는데, 방법을 찾지 못하겠네요.
고수님의 답변 부탁드립니다.

keizie의 이미지

GtkWidget의 window 멤버가 GdkWindow이고, GdkWindow에서 Window를 반환하는 함수는 grep ^Window *로 찾아보면 gdkx.h에 하나가 있습니다. 이 파일을 열어보면 멤버에 접근하는 몇 가지 매크로를 볼 수 있는데, 그 중에 찾는 게 있을 겁니다.

다만 (제가 기억하기로) GtkWindow에서 얻어낸 Window로 작업하는 건 gtk가 보호해주지 않기 때문에 침범당하면 다시 그려야 합니다.

lobin2의 이미지

이리 저리 찾으려고 노력해 봐도 찾지를 못하겠네요..
기억 나시면 작은 힌트라도 부탁드립니다. ^^;

cwryu의 이미지

GDK_WINDOW_XID(window->window)

----
익명이나 오래전 글에 리플은 무조건 -1

lobin2의 이미지

말씀해 주신대로 GtkWidget의 멤버변수인 GdkWindow* window를 GDK_WINDOW_XID를 사용해서 Window*형으로 변환이 되었습니다.

그 역순인 Window *window변수를 GtkWindow와 연결해서 출력 시킬 수 있는 방법이 없을까요?
MDI문제로 Xlib와 Gtk를 통일하지 못하고, 베이스가 Xlib로 짜여진 프로그램에서 Gtk에서 생성된 GtkMozEmbed의 창을 연결하려니... 문제가 많네요..

이 문제로 2주째 고민중인데... 아직 답을 못찾고 있습니다.
Xlib의 Window* 형으로 미리 생성해 둔 window를 GtkWindow로 변환하는 법을 알고 싶습니다.
gdk_window_foreigner_new로 생성을 하면 GdkWindow형이 리턴되는데, GtkMozEmbed에서 GtkWidget형태로 컨트롤 하는데, GdkWindow형으로 GtkWidget으로 변환이 안되네요....

답답하네요... ㅠ.ㅠ

keizie의 이미지

gtkwidget.h에서 GdkWindow로 찾으면 나오는 함수 중 가장 그럴 듯한 게 void gtk_widget_set_parent_window(GtkWidget *widget, GdkWindow *parent_window); 입니다. 이걸로 구글링을 해보니 아래 주소가 나오네요. 모질라 코드도 보이고 하니 이런 걸 찾으시는 거 같습니다.

http://www.koders.com/c/fid9A89A2F79296946AE6279261E1E6F087FA0BF0FE.asp

keizie의 이미지

http://mail.gnome.org/archives/gtk-app-devel-list/2005-May/msg00232.html

GtkWidget은 스스로 GdkWindow를 만드는 거지 주어진 걸 가공해서 쓰는 게 아니라고 합니다.

작업하시는 xlib 환경이 어떤 툴킷인지 모르겠는데, 저 메일에 있는 것처럼 XEMBED 구현체를 통하셔야 하겠습니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.