glade with C
글쓴이: asleea / 작성시간: 토, 2014/01/18 - 2:20오전
글래이드를 이용해서 간단하게 프로그램을 만들어 보려고 합니다.
메인문에서 처음 메인문에서 Gtkbuilder를 만들어주고
각 함수에서 원하는 필요한 Gtk 오브젝트를 꺼내서 쓰도록 하기 위해서 각각의 함수들은 Gtkbuilder를 인자로 받도록 하였습니다.
Gtkbuilder를 인자로 받는 함수들은 최초 호출되는 순간 static Gtkbuilder 변수에 만들어진 Gtkbuilder를 받고 그 후 호출될 때마다
처음 초기하된 Gtkbuilder를 가지고 각 목적에 맞는 프로세스를 수행하도록 하기 위한 목적이었습니다.
예를 들어 insertStateTextView는 text buffer 오브젝트를 꺼내서 함수 목적에 맞는 프로세스를 수행하니다.
그래서 한번에 초기화를 수행하려고 functionStaticInit(builder)라는 함수에 초기화를 할 함수들을 몰아서 넣어려주고 만들었습니다.
그런데 동작을 하지 않습니다.
원인지 무엇인지.
디버깅 모드로 살펴보면 Gtkbuilder가 함수로 넘어가는 순간 ref_count가 0이 되어버리던데
int main (int argc, char *argv[])
{
GtkBuilder *builder;
GtkWidget *window;
gtk_init (&argc, &argv);
builder = gtk_builder_new ();
gtk_builder_add_from_file (builder, "gladeTest.glade", NULL);
window = GTK_WIDGET (gtk_builder_get_object (builder, "window"));
gtk_builder_connect_signals (builder, NULL);
g_object_unref (G_OBJECT (builder));
gtk_widget_show (window);
pthread_t tid[1];
pthread_create(tid, NULL, threadFun, NULL);
functionStaticInit(builder);
gtk_main ();
return 0;
}
int functionStaticInit(GtkBuilder* builder){
int rtn = 0;
insertStateTextView("***Builder Initialization***", builder);
return rtn;
}
void insertStateTextView(const char *stateLog, GtkBuilder* builder) {
static bool initFlag = false;
static GtkTextBuffer* stateTextBuffer;
GtkTextMark *mark;
GtkTextIter iter;
if(initFlag == false){
stateTextBuffer = GTK_TEXT_BUFFER(gtk_builder_get_object(builder, "stateTextBuffer"));
assert(stateTextBuffer);
initFlag = true;
}
gdk_threads_enter();
mark = gtk_text_buffer_get_insert(stateTextBuffer);
gtk_text_buffer_get_iter_at_mark(stateTextBuffer, &iter, mark);
gtk_text_buffer_insert(stateTextBuffer, &iter, stateLog, -1);
gdk_threads_leave();
}Forums:


실수.....;;;;
헛 죄송합니다.
제가 g_object_unref (G_OBJECT (builder)); 를 호출하고 있어네요.....;;;;;
이거 때문에 이중 포인터로 넘겨보고 레퍼런스 써버고 별짓 다했는데. 삽질하고 있었네요
잘 해결되셔서 다행입니다.
잘 해결되셔서 다행입니다.
--
마잇
댓글 달기