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

  1. 2010.08.06 gtk할떄는 gtk_init의 인자를 제대로 넣자. (2)
  2. 2010.07.30 외부 Thread에서 GTK 위젯 제어할시 동기화 문제 해결 (5)
  3. 2008.09.06 지금에서야 막 방금짠 시간표!!! (10)
  4. 2007.06.14 윈도우 메니져 설정 무시하고 윈도우 만들기 (2)
  5. 2007.03.30 g_signal_connect의 폐해? (4)

gtk할떄는 gtk_init의 인자를 제대로 넣자.

gtk_init은 WM_CLASS에 영향을 준다.

gtk_init(NULL, NULL);로 해도 동작은 하지만

gtk 어플은 argv[0]의 값으로  WM_CLASS값을 처리하는데 

NULL 이니깐 WM_CLASS값이 제대로 나오지 않는경우가 발생하므로

(xprop로 찍어보면 WM_CLASS = <unknown> 으로 나옴)

윈도우 관리자가 해당 어플의 윈도를 관리할때 좀 문제가 생긴다

(오박같은경우는 class, role  값이 필요하다;; 근데 이 값들이 맛이가니 설정이 당연히 안먹음

WM_CLASS값의 하위값(?) 이 WM_ROLE이라서 그런지 role만 설정해선 먹히지도 않음 )

왠만하면 main 함수에서 argv를 받아서 처리하자...

아 참고로..

gtk_init(&argc, &argv);므로

첫번째인자는 그냥 1차원 포인터로 넘기면 되는거구

두번째 인자는 3차원 포인터로 넘기면 된다.....

내가 생성하려고 했는데..

머 나같은 경우에는 외부에서 void*로 받아서 char***로 넘겨버렸다.

이너므 gtk는 기초하다가 안하고 하다가 안하고 하니깐 계속 기초만 보게된다.....

사실 gtk보단 QT를 해야 더 먹고사는데 지장이 없을텐데......

어서 빨리 윈도플머에서 리눅이플머로 넘어가야할텐데..
신고
trackback 0 Comment 2

외부 Thread에서 GTK 위젯 제어할시 동기화 문제 해결

내가 만드는 삽질 프로그램이 하나 있는데...

얘가 원래 터미널용 프로그램이라서.. 좀 뽀대나게 겉모습을 "Music Player"같이 변모시켜보고자

Front End를 좀 만들기로 했었다.

근데 하나의 프로세스에다가

"(터미널때) 원래 실행되는 루틴 + Gui Event 콜백(Gtk 므로  gtk_main(); )을 넣다보니......

원래 진행되어야 하는 부분이 gtk_main() 때문에 수행이 되지 않으므로.......

할수 없이 pthread를 사용해서 그 두 부분을 분리하기로 했다

(난 개인적으로 스레드 정말 싫어해서... 터미널용 프로그램에서도 다행히(?)도 스레드 사용을 안했

아 하나 했었다... timer 관련해서 0.01초마다 카운터 올리는 콜백(?)함수를 사용했지...

사실 이부분도 더 신경써서 고쳐야되는데 아직도 방치중이다 아아...)

              main();
                           |
                   pthread_create();
                           |
            ------------------------------
           |                                            |
terminal_program                       create_gtk_widgets
          |                                             |
          |                                      gtk_main();
    emit gtk signal ---------------------|     
거지같아서 그림으로 대체

DIA로 열심히 그렸는데... 일헌 그림이 짤려버렸군여..

사용자 삽입 이미지

확실히 텍스트로 찍찍 그어서 만든 조합보단 훨씬 멋있다!

처음엔 신경쓰다가 결국엔 대충 그렸으니깐 "저거 이상해여" 테클걸진 말아달라는,.

코드는 기껏해야 몇천줄인데 저렇게 보니깐 엄청 뭔가 한것같이 느껴지네...ㅋ 그림의 위엄 ㅋ

처음에 분기하는 부분은 pthreaad로 내가 직접 생성한거구

Terminal Thread를 나눈건.. 내가 직접 나눈것이 아니라, Timer라이브러리에서 Thread를 나누는것.

(이 부분은 별 신경 안썼다... )

내가 원하는건 왼쪽 (MPD Event Callback이랑 Timer Callback)에서 Gtk한테

"라벨 위젯 글자좀 바꿔주셈" 이라고 요청한것...

근데 그냥 이렇게 하면.. 몇십초 동안 프로그램이 잘 동작하다가 갑자기 죽어버리거나,

갱신이 안되고 계속 멍때리고 있는 문제가 발생한다..... (

처음엔 내가 만들었던 소스코드가 문제가 있나싶어서 열심히 뒤졌지만... 그래도 안나오는거짐..

gdb로 디버깅해도 이상한데서 죽어버리거나, 프로그램은 잘 살아 있는데도 글자갱신이 안되는

문제가 그대로 발생했었다..

이게 뭔가... 분명 GUI 씌우기 전에는 제대로 동작을 했었는데.. 씌우고 나서 안되니..

음.... 그러다가 갑자기 thread에 feel이 와서 구글을 찾아보니 왠걸..

http://library.gnome.org/devel/gdk/stable/gdk-Threads.html

역시 매뉴얼을 잘 읽어봐야 한다 -_-.......................

Gtk랑 pthread랑 같이 사용한다면..

gdk_threads_enter();

GTK_SourceCode;

gdk_threads_leave();

왜 같이 사용해야한다...

즉 다른 thread에서 GTK 사용할때는 gdk내부에 크리티컬섹션을 만들어 줘야 함

(외부 thread에서 gtk 함수 콜하는 모든 부분을 저렇게 보호)

근데 원인이 뭘까?

위젯값들은 전역에 static으로 선언 해서 위젯 포인터 받은이후는 바뀔일은 없을텐데...

gdk 이벤트 관련해서 문제가 생기나....

으아아아아...

핀트는 좀 다르지만.
3년전에 내 블로그에 이 내용 썼구나...

바보 인증 ㅠㅠ
http://lowid.tistory.com/entry/gtk-Thread

다음 부터는 내 블로그 먼저 검색해봐야 겠다.......

7월 18일 "제목" 작성, 7월 31일 발행
신고
trackback 0 Comment 5

지금에서야 막 방금짠 시간표!!!

뭐 큰 일은 아니지만

그래도 글을 좀 써보는게 나을거 같아서..........

사용자 삽입 이미지

과목평

1, 1교시는 다 없네여 짜놓고 보니... 뭐 출퇴근길에 차막히는 일은 없어서 다행 ㅋ

2, 알고리즘은 듣기 싫은데... 안하기도 뭐해서 그냥 넣어버림 ㅜㅜ 방고리즘(?) 아닌게 다행

3, 객체지향 만만하게 봤다가 망한듯해염 첫날부터 플로챠트100개 크리 ㅜㅜ

4, 자바 - 뭐 어떻게든 되겠......;

5 컴퓨터 네트워크 - 데이터 구조보단 낫겟........;

다행이 교수님은 수업은 그리 졸린것 같진 않던데..... 과목이 재미없다면.;;

6 임베디드 = 마이크로 설계 + 운영체제 실무 - (???)

7, 운영체제실무!! 드디어 리눅스에서 C언어 플밍한걸 써먹을수 있는 기회가...!

워 사실은 유닉스 프로그램이고 책은
UNIX Systems Programming 상세보기
Robbins 지음 | Prentice-Hall 펴냄
수많은 연습문제와 예제, 프로젝트를 통해 UNIX의 이론을 체험하자!!! UNIX 프로세스, 파일 그리고 특수 파일 시그널과 타이머 POSIX 쓰레드, 세마포어와 IPC TCP, UDP, 멀티캐스트와 웹프로젝트 : 인터넷 라디오...
요고로써 영통도서관에서 몇번 빌려 봤던책입니다


왜냐하면 Beginning Linux Programming 이 내용이 좀 부실하거든요...
BEGINNING LINUX PROGRAMMING 3/E 상세보기
RICHARD STONES 외 지음 | 정보문화사 펴냄
기본적인 파일 동작,입력과 출력 그리고 유닉스에서 데이터를 다루는 방법, 프로세스간 통신,네트웍크,웹 인터페이스를 구성하기 위해 CGI스크립트 기능을 사용하는 등 클라이언트-서버 프로그래밍의...

시그널이나 이쪽 부분이(mpd타이머 관련 구현 할려니깐 없어서리)

아 그리고 이거(BLP)  서점에서 보니까 3판도 찍혀나왔더군요 ㅋㅋ

커널부분은 인기가 없었는지 아예 없어졌고 ㅋㅋ

다행이 GTK,QT는 아직 붙어있음.. 나머지는 전판과 다 같은듯


안그래도 잇었으면 좋겠다고(USP) 생각은 했는데 잘됬네요...

내용은 좀 복잡하게 나옵니다

솔직히 이책 자체는 좋은 편이지만

입문용(처음) 시작하기에는 그리 적당한 책은 아니라고 생각하지만뭐

내가 무슨 능력이 있나;

(사실 유닉스 플밍분야의 최고의 책은 역시 APUE! 그러나 변역본보면 안습이......)

아 이거 나오고 나니깐 뿌리뤡에서 나온 QT책도 생각나는군여..
QT PROGRAMMING 상세보기
서영진 지음 | 프리렉 펴냄
이 책은 Qt 프로그래밍에서부터 Qtopia 프로그래밍의 영역까지 다루고 있다. 리눅스, MS...임베디드용으로 Qt프로그램을 작성해서 실행하는 것, Qt의 개발 도구들을 이용해서 Qt 프로그래밍을 해보는 과정 등을...
= 이책 나오려고 대체 몇년이나 끌었는지!
=사고싶다! 근데 사봣자 또 쌓아놓고 몇년있다 공부할거 같아요 전 맨날 이럼;

안그래도 이과목 마지막에 QT플밍도 해야하는데..........(내가왜 Gtk로 시작했는지 ㅜㅜ)

아 이제 그만.. 이러다가 시간표가 아니라

책소개하는 포스팅이 되버릴라...

그리고 의외로 이과목 수강신청을 안해데요? 4개있는데 무려 2개가 폐강 -_-

인원수도 별로 없고.. 얘들이 플밍수업은 다 기피하는듯???

근데 이것도 만만하게 봤다가 망하는거아닐까하는 약간 불길한 에감이 유유...

나 쓰래드 잘 못하는데..... 그냥 API만 써대면 대낭??;

마지막으로, 교양!

이거 할말이 많아염...

앞에서도 적었지만 운영체제 실무과목이 폐강이되는 바람에..

교양 시간표가 싹바끼게 되었는데..

SDU(인강) -> 과목이 그지같음....
 
1 인강인데도 오프수업도 있고

2 온라인으로 자짜서 오프라인으로 조원끼리 만나야 대며

3 책배끼기도 있고 (필사하기)

4 토론 점수라는 이상한게 있어가지고 개시판에 글도 써야하고

5 조원 점수매기는거 비슷하게 있어가지고 그거 점수 잘 안나오면 학점이 그지

차라리 이럴바에 그냥 학교 수업을 듣고 말겠삼

해서 어제부터 엄청 교양과목을 바꾸기 시작했는데...........

초반엔 한문,한국경제학,공학과 경제 이런 심오한 과목 -_- 을 했지만

다행히도 F5신공으로 2시간전에 가까스로 저 시간표를 완성!

(이번 24시끼지가 마감이니까요)

그래도 정해진 시간표의 교양고목이 "심오한" 과목보다는 휄씬 나으니까 다행!


-덧 그러고 보니 놋북 리뷰를 안했군여.....

꾸린 폰카로 사진은 다 찍어서 하드에 저장해놨는데.........

과제땜에..........

플로차트 100개 그린다음에 포스팅을 하겠 ㅜㅜ

신고

'Etc' 카테고리의 다른 글

공유기 문제  (10) 2008.09.28
음...  (3) 2008.09.27
지금에서야 막 방금짠 시간표!!!  (10) 2008.09.06
결국이걸로 낙점..  (13) 2008.08.18
일상  (0) 2008.08.12
놋북을 살려고 하는데 추천좀,,,  (10) 2008.07.31
trackback 0 Comment 10

윈도우 메니져 설정 무시하고 윈도우 만들기

 if(term_cfg -> all_workspace_view == TRUE)
       //모든 워크스페이스에 출력
        gtk_window_stick(GTK_WINDOW(term_widget -> window));

    if(term_cfg -> taskbar_view == FALSE)   //default TRUE
        //테스크바에 안보이게 하기
        gtk_window_set_skip_taskbar_hint(GTK_WINDOW(term_widget -> window), TRUE); 

    if(term_cfg -> layer == 1) 
        gtk_window_set_keep_above(GTK_WINDOW(term_widget -> window), TRUE);         //최상위 윈도우로 만들기 (단 윈도 매니져가 우선)
    else if(term_cfg -> layer==0){
        /* gdk_window_lower,gdk_window_set_override_redirect 함수와
         * gtk_window_new 함수 연결 같은거.. 하려고;;
         * (window -> window 내용 채우기 위해서 ㅋ*/
        gtk_widget_realize(term_widget -> window);
        if(term_widget -> window -> window == NULL){
            puts("NULL!!!");
            exit(1);
        }  

        //윈도우 메니져의 설정을 무시한닷!!!
        gdk_window_set_override_redirect(term_widget ->window ->window,TRUE);
           
        //윈도우를 최하위로 만든담에 (이거 안되는데; )
        //gdk_window_lower(term_widget -> window -> window);
    }  

kldp에다가 질문을 올렸었는데 뭐 갈켜주는 사람도 없고 해서 어쩔수 없이 혼자 찾은
구글링 해서 찾았는데.......
역시 제일 나은건 man페이지라는거.........
------------------------------------------------------------
기억 보존을 위해서 적어둠...
신고
trackback 0 Comment 2

g_signal_connect의 폐해?

왜그런진 모르겠으나..

이상하게 gtk  signal을 연결해줄때 쓰는 함수

g_signal_connect 힘수 (또는 그 외에도 많지만은..)

이상하게 인자를 하나만 받아들이게 되어있어서

결국엔 구조체를 만든다음 한꺼번에 인자하나로 넘겨줄수 밖에 없는데

그러다보니...

/*header*/
59 struct st_quit
60 {
61     GtkWidget *window;
62     GtkWidget *terminal;
63     int terminal_number;
64     int *S_term;
65 };

/*main*/
 25     static struct st_quit Quit_Data[TERM_LIMIT];
30     static int terminal_onoff[TERM_LIMIT];  
51     Quit_Data[terminal_num].S_term=terminal_onoff;

/*func*/
  8     //혹시 함수 잘못 불러올까봐서 ...;                                                                
  9     if(G_st->S_term[G_st->terminal_number]==ON){                                               
 10         //받은 위젯 파괴, 그리고 플래그 OFF시킴
 11         gtk_widget_destroy(G_st->window);
 12         G_st->S_term[G_st->terminal_number]=OFF;    
 13     } 
                          
if(G_st->S_term[G_st->terminal_number]==ON)
라는 복잡한놈으로 변한다..

와 gtk 함수들은(일부?) 는 인자를 여러게 받게 안만들어 놨을까..?

(함수의 갯수가 유한하지만(8개였나??) 그래도 좀 많이 만들어 놓지 불편하잖아..)

이거...한 한달만 안보고 있다가 이거 보면 과연 내가 짜논거 제대로 이해나 할수 있을런지 모르겠다 -_-a

뭐 어쩔수 업지멀.. 호좁이라 이정도 밖에 머리를 못쓰겠는걸,.
(그렇다고 전역변수 쓰기도 그렇고........).
신고
trackback 0 Comment 4
prev 1 2 next


티스토리 툴바