디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

다음과 같은 에러가 났다. 어떻게 해결하는 것이 좋겠는가?

나르시갤로그로 이동합니다. 2025.09.27 17:33:34
조회 73 추천 0 댓글 1

이 에러는 GTK 4.18 버전부터 X11 백엔드에 직접 접근하는 함수들이 비권장(deprecated)으로 처리되었고, 컴파일 옵션에 -Werror가 포함되어 경고가 에러로 취급되었기 때문에 발생합니다.

해결책은 GTK의 내장 함수인 gtk_widget_translate_coordinates를 사용하여 X11 종속적인 코드를 제거하는 것입니다. 이 방법은 코드를 간결하게 만들고 Wayland 환경에서도 문제없이 동작하게 해줍니다.


## 문제 원인

GTK4는 특정 윈도우 시스템(X11, Wayland 등)에 종속되지 않는 것을 목표로 합니다. 이 때문에 gdk_x11_display_get_xdisplay gdk_x11_surface_get_xid처럼 X11의 내부적인 Display Window ID에 직접 접근하는 함수들의 사용을 막고 있습니다.

기존 코드의 목적은 위젯의 지역 좌표를 화면 전체의 전역 좌표로 변환하는 것이었는데, 이 작업을 더 이상 X11 함수로 직접 처리해서는 안 됩니다.


## 해결 방안

nimf_gic_set_cursor_pos 함수를 다음과 같이 수정하여 GTK가 제공하는 백엔드 독립적인 방식으로 좌표를 변환할 수 있습니다.

수정 전 코드 (X11 종속)
static void nimf_gic_set_cursor_pos (GtkIMContext* context, GdkRectangle* area)
{
  NimfGic *gic = NIMF_GIC (context);

  GdkRectangle root_area = *area;

  if (gic->client_widget)
  {
    GtkNative *native = gtk_widget_get_native (gic->client_widget);  /* do not free */

    if (native)
    {
#ifdef GDK_WINDOWING_X11

      GdkSurface *surface = gtk_native_get_surface (native); /* do not free */
      GdkDisplay *display = gdk_surface_get_display (surface); /* do not free */

      if (GDK_IS_X11_DISPLAY (display))
      {
        Window          child;
        XWindowAttributes attr;
        Display        *xdisplay = gdk_x11_display_get_xdisplay (display);
        Window          xwin     = gdk_x11_surface_get_xid (surface);

        XGetWindowAttributes (xdisplay, xwin, &attr);

        if (area->x < 0 && area->y < 0)
          XTranslateCoordinates (xdisplay, xwin, attr.root, 0, attr.height,
                                 &root_area.x, &root_area.y, &child);
        else
          XTranslateCoordinates (xdisplay, xwin, attr.root, area->x, area->y,
                                 &root_area.x, &root_area.y, &child);
      }
#endif
    }
  }

  nimf_ic_set_cursor_pos (gic->ic, (const CRect*) &root_area);
}
수정 후 코드 (백엔드 독립)

X11 관련 코드를 모두 제거하고 gtk_widget_translate_coordinates를 사용합니다.

static void nimf_gic_set_cursor_pos (GtkIMContext* context, GdkRectangle* area)
{
  NimfGic *gic = NIMF_GIC (context);
  GdkRectangle root_area = *area;

  if (gic->client_widget)
  {
    // 위젯의 최상위 창(Toplevel window)을 가져옵니다.
    GtkWidget *toplevel = gtk_widget_get_ancestor (gic->client_widget, GTK_TYPE_WINDOW);

    if (toplevel)
    {
      double dest_x, dest_y;

      // client_widget의 좌표를 toplevel 창의 좌표로 변환합니다.
      gtk_widget_translate_coordinates (gic->client_widget,
                                        toplevel,
                                        (double) area->x,
                                        (double) area->y,
                                        &dest_x,
                                        &dest_y);

      // 변환된 좌표는 toplevel 창 내에서의 상대 좌표이므로,
      // toplevel 창의 위치를 더해주어 화면 전체의 절대 좌표를 구합니다.
      int win_x, win_y;
      GtkNative* native = gtk_widget_get_native (toplevel);
      GdkSurface* surface = gtk_native_get_surface (native);
      gdk_surface_get_root_coords (surface, 0, 0, &win_x, &win_y);
      
      root_area.x = win_x + (int) dest_x;
      root_area.y = win_y + (int) dest_y;
    }
  }

  nimf_ic_set_cursor_pos (gic->ic, (const CRect*) &root_area);
}

## 수정된 코드의 장점

  • 백엔드 독립성: 이 코드는 X11과 Wayland 모두에서 수정 없이 동일하게 동작합니다. ?+
  • 코드 간결성: 복잡한 #ifdef 전처리기와 Xlib 함수 호출이 사라지고 간결한 GTK API 호출로 대체됩니다.
  • 미래 호환성: GTK가 권장하는 최신 API를 사용하므로 앞으로의 GTK 버전에서도 안정적으로 작동할 가능성이 높습니다.


추천 비추천

0

고정닉 0

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 공개연애가 득보다 실인 것 같은 스타는? 운영자 25/10/06 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
2893987 나 욕 좀 해줄수 있냐 [9] ㅇㅇ(211.234) 10.04 71 1
2893980 동기부여 한번만 도와줘라 [9] 프갤러(219.254) 10.04 91 0
2893976 끝났다. 이제 러스트가 소프트웨어 업계를 지배한다. [1] 프갤러(110.8) 10.04 89 0
2893975 디시에 글 쓸 때 화교 족보 얼마나 섞여있는지 [2] 프갤러(211.210) 10.04 46 0
2893974 난 오래전부터 대비할려고 헤이세이 잃어버린 30년 정독해왔음 타이밍뒷.통수한방(1.213) 10.04 43 0
2893973 [대한민국] 코리아패싱, 트럼프, 방한일정 1박 2일로 축소 [1] 프갤러(121.172) 10.04 63 0
2893972 방학 2달 동안 만든 애니 사이트 [2] 덕스타갤로그로 이동합니다. 10.04 70 1
2893967 왜 문서화 해준거 읽을땐 화 안내면서 차근차근 대화로 해주면 화남? [1] ㅇㅇ갤로그로 이동합니다. 10.04 55 0
2893964 요즘 주식자동매매 히트는 백테스팅에 ai ㅆㅇㅆ찡갤로그로 이동합니다. 10.04 53 0
2893962 현시대는 토발즈도 1찍 짱깨편인 무서운 시대이다ㅋㅋ번식 더 해줘라 이기 타이밍뒷.통수한방(1.213) 10.04 32 1
2893961 ㅆㅇㅆ 멍청한점 [1] 프갤러(210.217) 10.04 76 4
2893958 그렇긴해 프갤에 초고수가 방문해도 뭘 질문할지 모르잖아 [1] ㅇㅇ갤로그로 이동합니다. 10.04 46 0
2893955 이번달 주식 매매 프로그램은 3건이네 ㅆㅇㅆ찡갤로그로 이동합니다. 10.04 47 0
2893953 짜빠게티 먹어야겟다 프갤러(210.217) 10.04 26 0
2893948 한국 ai기업 밀어주는거 씹돈낭비인데 [4] 프갤러(210.217) 10.04 88 1
2893947 ㅋㅋ ㅆㅇㅆ 좆밥 새끼 프갤러(210.217) 10.04 67 4
2893945 캬 씨발 좆지리는거 나왔다 ㅋㅋ [3] ㅆㅇㅆ(124.216) 10.04 108 0
2893943 난 제미나이 울트라라서 딥 싱크랑 딥 리서치 쓰는데 [1] 프갤러(125.184) 10.04 53 0
2893941 좆밥 새끼들은 ai 가져도 한계가 좆밥에서 못벗어남 프갤러(210.217) 10.04 55 1
2893938 AI로 작업하기전에 AI에 롤을 부여해봐 [3] 프갤러(125.184) 10.04 74 0
2893937 테크레이더에서도 그랬잖아 AI개발할땐 가드레일이 필수라고 ㅆㅇㅆ(124.216) 10.04 46 0
2893936 AI 쓸떄 그냥 핵심에는 안쓰고 덜중요한부분에서만 쓰면됨 [9] ㅆㅇㅆ(124.216) 10.04 71 0
2893935 잘모르는거 AI개발할때는 실개발하기전에 계속 정리하고 [2] 프갤러(125.184) 10.04 48 0
2893934 근데 AI들이랑 대화하다보면 후빨 조지지 않냐? [4] ㅆㅇㅆ(124.216) 10.04 83 0
2893933 오늘도 일나간다..ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 10.04 35 0
2893932 현시대는 토발즈도 1찍 짱깨편인 무서운 시대이다ㅋㅋ번식 더 해줘라 이기 [1] 타이밍뒷.통수한방(1.213) 10.04 44 0
2893931 필연적으로 폼제출이나 결제드가면 서버액션 [2] ㅆㅇㅆ찡갤로그로 이동합니다. 10.04 49 0
2893930 프로젝트 리액트 19랑 next15로 마이그레이션했다 [6] ㅆㅇㅆ찡갤로그로 이동합니다. 10.04 78 0
2893929 다 시골내려갔나? 글이 없네..ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 10.04 53 0
2893928 하고 싶으면 하는건데 대충 기웃거리려면 하지말라는거지 프갤러(125.184) 10.04 64 0
2893927 막걸리 어제 밤에 한병 반 마셨더니 ㅇㅇ(110.70) 10.04 41 0
2893925 카스 이젠 짱깨맥주? ♥냥덩이♥갤로그로 이동합니다. 10.04 46 0
2893924 불법주차 영포티 참교육 가즈아~ ♥냥덩이♥갤로그로 이동합니다. 10.04 52 0
2893923 수술 범죄의 수법과 배경 [1] ㅇㅇ(211.216) 10.04 39 0
2893912 어느 카페 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 10.04 42 0
2893910 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 10.04 39 0
2893909 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 10.04 57 0
2893906 나는 이해가 안가는게 왜 지가 하고 싶은걸 남한테 하지말라 듣고있냐 [1] ㅆㅇㅆ(124.216) 10.04 61 0
2893900 33 고졸 비전공 개발자 하지마? [3] 프갤러(122.199) 10.04 167 0
2893861 개발자분들은 [2] 프갤러(211.204) 10.04 80 0
2893835 타직종인데 개발자로 테크트리 다시타고싶습니다 [13] 프갤러(115.21) 10.04 134 0
2893834 이번 체인소맨 영화 재밌게 봤으면 발레리나를 봐보셈... ㅇㅇ(223.39) 10.04 55 0
2893830 신입한테요구하는거 죤나많네 시발새끼들 [1] 프갤러(211.235) 10.04 97 0
2893827 34살에 빚이천만원있음.. [4] ㅇㅇ(175.197) 10.04 120 0
2893826 이번 추석명절 유흥 반값에 가는법 꿀팁 ㅇㅇ(118.235) 10.04 51 0
2893825 4050이 나라를 살린다 [2] 야옹아저씨갤로그로 이동합니다. 10.04 79 1
2893821 막걸리 한 병 깠다 [4] ㅇㅇ(121.168) 10.03 72 0
2893818 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ [1] ♥덩냥이♥갤로그로 이동합니다. 10.03 88 0
2893816 나님 내년 1분기까지 노워킹 온리조깅으로 30km 도전 [2] ♥냥덩이♥갤로그로 이동합니다. 10.03 75 0
2893813 현시대는 토발즈도 1찍 짱깨편인 무서운 시대이다ㅋㅋ번식 더 해줘라 이기 타이밍뒷.통수한방(1.213) 10.03 38 0
뉴스 김수현, 김나영 재혼 등 연예계 희비 디시트렌드 10.06
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2