'GTK+'에 해당되는 글 10건

  1. 2007.02.28 xlib 에러 해결! (2)
  2. 2007.02.27 gtk Thread (2)
  3. 2006.08.04 (초보) gtk 작성팁 (10)
  4. 2006.07.30 GTK_TEXT 에러..해결책 (4)
  5. 2006.07.18 Glade! 리눅스 GUI 프로그래밍 툴

xlib 에러 해결!

The program 'key_grab_ex' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadAccess (attempt to access private resource denied)'.
(Details: serial 11 error_code 10 request_code 33 minor_code 0)
(Note to programmers: normally, X errors are reported asynchronously;
that is, you will receive the error a while after causing it.
To debug your program, run it with the --sync command line
option to change this behavior. You can then get a meaningful
backtrace from your debugger if you break on the gdk_x_error() function.)

쓰래드랑 Xlib랑 같이 썼을경우에 나타남..
일단 쓰레드 사용이 재대로 되었나 확인할것...
또 키가 겹치지 않는지 확인하자!
window-manager,사용자 설정과 같이 겹치면 ..XXXXXXXXXX
전역단축키가 걸려있는데 그걸또 불러내게 하니까 위의 오류가 나서...

'Programming > GTK+' 카테고리의 다른 글

윈도우 메니져 설정 무시하고 윈도우 만들기  (2) 2007.06.14
g_signal_connect의 폐해?  (4) 2007.03.30
xlib 에러 해결!  (2) 2007.02.28
gtk Thread  (2) 2007.02.27
vte를 이용한 간단한 터미널  (2) 2007.01.14
libglade 컴파일법  (1) 2006.12.14
Trackback 0 Comment 2

gtk Thread

이번에 Thread가 먼지 확실히 알게된...
대충 하나의 프로그램의 흐름을제어 하는것..인거 같다..
fork는 같은 프로그램 이미지를 copy하는거랑 비교하면...
아 몰라 암튼

if(!g_thread_supported())
g_thread_init(NULL);
쓰레드가 지원하는지 확인하고 초기화시킨다 (역시 gtk는 함수만 봐도 딱 보인다니까..)

if(!g_thread_create((GThreadFunc)me_keys,window,FALSE,NULL))
perror("Thread ERROR");
쓰레드를 생성한다

gdk_threads_init(); //이것도 초기화
gdk_threads_enter();
gtk 함수들 ~
gdk_flush();
gdk_threads_leave();
을 랩핑한다

예시>
227 puts("Show");
228 gdk_threads_enter();
229 gtk_window_deiconify(GTK_WINDOW(widget));
230 gtk_window_present(GTK_WINDOW(widget));
231 gdk_flush();
232 gdk_threads_leave();

근데 이런식으로 해서 xlib랑 앞에 포스팅된 key_grap 할려니깐 자꾸 에러가 먹네..

Xlib: unexpected async reply (sequence~)

음 다시 찾아보니 gtk_thread_init를 빼먹었었구나..(현재 윗부분 수정)

가끔씩 맛이 가는거 빼곤 잘된다...

참고:
http://bebop.emstone.com/research/python/pygtk_faq/chapter20#id5

'Programming > GTK+' 카테고리의 다른 글

g_signal_connect의 폐해?  (4) 2007.03.30
xlib 에러 해결!  (2) 2007.02.28
gtk Thread  (2) 2007.02.27
vte를 이용한 간단한 터미널  (2) 2007.01.14
libglade 컴파일법  (1) 2006.12.14
TODAY.... 삽질 DAY  (6) 2006.08.09
Trackback 0 Comment 2

(초보) gtk 작성팁

#1 g_signal_connect 함수 인자 넘겨주기

#include<gtk/gtk.h>

struct testing
{
    int a;
    char b;
};
.......
int delete_event(GtkWidget *widget,struct testing *data)
{
        data->a=3;
       printf("%d\n",data->a);
        return (FALSE);
}

int main(int argc,char *argv[])
{
   struct testing abc;
   ..........
   g_signal_connect(GTK_OBJECT (window), "delete_event",GTK_SIGNAL_FUNC (delete_event),&abc);
   ..........
}

연걸함수쓸때..(g_signal_connect) 인자를 넘겨주는 부분이 한곳(제일 마지막 인자) 밖에 없어서
어쩔수 없이 전역 변수를 사용해서 하는 수밖에 없었는데.. 그놈 포럼에서 찾아보니까 해결방법 이 있었다

"구조체를 넘겨주라"...라는것 ... 그래서 위에처럼 하니까 간단하게 해결되었다.
(사실 이방법말고 딴 방법을 찾을려고도 했지만...)

#2 윈도우 종료 시키기

사실 이거하기전에 윈도우를 종료 시키는 함수가 있긴 했다
gtk_main_quit();
바로 이함수,,,

그런데 문제는 이함수를 자식윈도우(?)에서 Call하면은 제대로 작동을 하지 않는다는것이었다
(첫번째 클릭때에서는 명령어 무시 2번 클릭하면 프로그램 자체가 종료)
그래서 아래의 방법을 사용하기로했다(이거 찾는다고 꽤나 고생)

void closeWin(GtkWidget *window,GtkWidget *data)
{
  gtk_widget_hide_all(data);
}

이함수를 쓰니깐 잘 작동을 한다.. 헌데.. 뭔가 찜찜하다랄까...
hide라서.. remove나 quit같은게 아니라서 말이다
(어감이 좀.... 말끔하게 없어진다는 게 아니라서 말이죠)

이것말고 새로운 방법들이 있는지도 찾아봐야겠습니다....

.... 헉... 이걸로 하면 인제 부모윈도우가 꺼져도  프로그램이 종료가 안되는...
이 함수도 안되겠군요.;;

라고 해서... kldp+튜토리얼의 힘으로 대충 알아냈습니다..
void closeApp(GtkWidget *window,gpointer *data)
{
    gtk_main_quit();
}

void errorMsg(const char *errMsg,GtkWidget *window)
{
   GtkWidget *dialog;

dialog=gtk_message_dialog_new_with_markup(GTK_WINDOW(window),
GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,errMsg);

g_signal_connect (GTK_WINDOW(dialog),"response",GTK_SIGNAL_FUNC(gtk_widget_destroy),
GTK_OBJECT(dialog));

 
gtk_widget_show_all(dialog);

}

Ps:
gtk를 사용하여 프로그램 만들기...
그다지 어렵지 않은거 같군요.. 제가 대총하는거 보니..
아주 직관적으로 이루워져 있어서.. 함수 이름만 보고 확실히 무언 기능을
하는가 알수 있습니다 하지만 그 단점으로는 너무 함수명이 길어지고 언더바를 너무
써서 새끼손가락에 무리? 가 간다는거 정도...

할만 합니다....(취소) 하지만 너무 복잡하네요..우아아악~

자...여러분도... 한번 간단한 프로그램을 작성해보는것은 어떻습니까?

GTK+ Reference Manual(ENG) => http://developer.gnome.org/doc/API/2.0/gtk/index.html
GTK+ Tutorial(KOR)   =>      http://wiki.kldp.org/KoreanDoc//html/GtkTutorial/GtkTutorial.html#toc25

'Programming > GTK+' 카테고리의 다른 글

vte를 이용한 간단한 터미널  (2) 2007.01.14
libglade 컴파일법  (1) 2006.12.14
TODAY.... 삽질 DAY  (6) 2006.08.09
(초보) gtk 작성팁  (10) 2006.08.04
GTK_TEXT 에러..해결책  (4) 2006.07.30
Glade! 리눅스 GUI 프로그래밍 툴  (0) 2006.07.18
Trackback 0 Comment 10

GTK_TEXT 에러..해결책

gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,"abc",3);
라고 했더니만

undefined reference to `GTK_TEXT' 라는 에러가 발생했다..
처음에는 오탈자인줄 알고서 몇번을 봤더만 틀린것이 없었다..

그래서 VI에서 자동완성 기능을 이용해서 저게 어느 헤더 파일에 포함됬는가 확인을 해봤는데.

/gtk/gtktext.h 라고 하길래  인클루드를 추가해 보았으나 소용이 없었다.

그래서 어쩔수 없이 구글링으로 써치 해서 자료를 찾았다..

찾은곳은 그놈 개발 메일링 리스트 같았다..

다행이 쉬운영어?라 대충 뭐라 하는지 이해하고.. 믿에 쭉.. 읽어보니깐 해결책이 나왔다
#define GTK_ENABLE_BROKEN
#include <gtk/gtk.h>

으로 해서 gtk.h파일 위에 define해주면 되는거 였다..

'Programming > GTK+' 카테고리의 다른 글

vte를 이용한 간단한 터미널  (2) 2007.01.14
libglade 컴파일법  (1) 2006.12.14
TODAY.... 삽질 DAY  (6) 2006.08.09
(초보) gtk 작성팁  (10) 2006.08.04
GTK_TEXT 에러..해결책  (4) 2006.07.30
Glade! 리눅스 GUI 프로그래밍 툴  (0) 2006.07.18
Trackback 0 Comment 4

Glade! 리눅스 GUI 프로그래밍 툴

제 리눅스 책뒤에 Gtk+가 설명이 있길래..

(읽기만 했지 머가 먼지 아직도 모름........)

쭉보고 있다가... M$ Windows 의 VB처럼..  윈도우 화면(비베식으로 폼) 을 마우스 클릭/드래그

해서 컨트롤을 올리듯이.. 하는게 리눅스에는 없을까... (이 뻔한걸 일일이 코딩하긴 그렇고..)

하고서 구글링 and MSN을 이용해서 알아본 결과 Glade라는 툴을 알게 되었죠..

사실.. 처음 무지 당황했습니다.. 속성 설정하는 부분도 있고 화려할거 같았지만..

달랑 메뉴 5개 툴바 5개의 썰렁한 화면.........;;; 그리고 팔렛트...

처음엔 정말.. 새파일 열기 해도.. 아무것도 안뜨는겁니다 폼같은거라도 떠야 뭘 잡아 끌든 말든 할텐데..

팔렛트에서 겨우 윈도우라는 것을 누르니깐 폼이 뜨더라는(새파일 하면 바로 나올줄 알았는데 아니더군요)

일단 윈도우(폼)를 하나 만들고 팔렛트(VB식으로 컨트롤모음)에 요소들을 클릭해서 비베처럼 끌었습니다..

그런데.. 이번엔 비베처럼 아예 끌리지도 않는겁니다.. 아 이것땜에 몇일동안 처박아 두었는데...

오늘에서야 알았는데.."고정된 위치"라는 컨트롤을 사용하니깐 비베처럼 컨트롤을 끌수가 있겠더군요..!

또 하나 문제점이 발생했습니다.. 속성 설정하는게 또 뭔지 몰라서.. 메뉴 뒤저보니깐 속성창이라는게

하나 있네요.. 그걸 뛰우고 컨트롤? 클릭 하니깐 속성이 쫙 보이는... 흠.

그래서 시험삼아서 방금 이녀석으로 Hello World~  예제를 작성해 보았습니다

하하.. 버튼도 하나 만들어서 클릭 하면 윈도(폼) 이 자동으로 꺼지게~ 말이죠..

버튼 클릭해서 꺼지게 할려면 Gtk 시그널,핸들 을 알아야 하더군요...

전 몰라서 그냥 보이는데로 이리리 찍었습니다만..

시그널은 그 객체가 어떻게 반응을 받는가? 핸들은 무었을(시그널에 받은것에) 실행시킬까? 이런거 같네요

앞에서도 말했지만.. 정말 모릅니다.. 대충 찍었을뿐 ..

객체:button1 에 대해서 속성의 시그널 탭에--> signal:click handle:gtk_main_quit

(아 글구 꼭 저장을 해야 하더군요 .........)

이렇게 만들어 놓으면 button1을 클릭하면 프로그램이 종료 되더군요  아신기...하다~

이부분은 뭔가 비베와 비슷한부분? 인거 같네요..흠..(설마 이것도 객체지향인가 아 몰겟네.;;)

아 그리고 파일을 제공해서 빌드하면 자동으로 컴파일 할수 있는 상태로 만들어 주는 좋은 기능도 있네요.

autogen.sh 라는 스크립트를 이용하면 되네요.. 그리고 make... src디렉토리에 들어가면

제가 만든 프로그램이 나오네요 흐흐 실행해 볼가나..


저런 허접한 플그램 하나가 나옵니다.. 종료 버튼을 누르면 프로그램 종료~

(소켓해야하는데.. 왜 내가 이걸 하고 있을까;;;;;;;;;)

'Programming > GTK+' 카테고리의 다른 글

vte를 이용한 간단한 터미널  (2) 2007.01.14
libglade 컴파일법  (1) 2006.12.14
TODAY.... 삽질 DAY  (6) 2006.08.09
(초보) gtk 작성팁  (10) 2006.08.04
GTK_TEXT 에러..해결책  (4) 2006.07.30
Glade! 리눅스 GUI 프로그래밍 툴  (0) 2006.07.18
Trackback 0 Comment 0
prev 1 2 next