디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.09.27 17:33:34
조회 77 추천 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 - -
2894087 토스도 판교어쓰냐? [2] 밀우갤로그로 이동합니다. 10.04 96 0
2894084 내일 하루 쉬고 또 매일 일해야 하는구나 ㅠㅠ 나르시갤로그로 이동합니다. 10.04 55 0
2894082 weston 업무용 데탑에 대해 레딧에 나르시갤로그로 이동합니다. 10.04 46 0
2894081 속보) 이진숙 방통위원장 불법체포 기각 [4] ♥덩냥이♥갤로그로 이동합니다. 10.04 76 1
2894080 일단 사람 수준은 갖추고 정치 논하자 [2] 프갤러(61.74) 10.04 65 0
2894078 중졸 이하들이 위선이 어쩌고 저쩌고 [6] 프갤러(27.175) 10.04 70 0
2894077 민주당 정권이 위선을 독점하는게 아님 ㅇㅇ(121.168) 10.04 54 0
2894076 코딩을 너무 쉽게 생각해서 문제다. [1] 프갤러(59.16) 10.04 79 0
2894075 술은 무조건 낮술임 [8] ♥덩냥이♥갤로그로 이동합니다. 10.04 70 0
2894074 연휴 모하지 하는 달붕이들은 위한 유흥 가성비 대충 정리 ㅇㅇ(118.235) 10.04 48 0
2894073 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥덩냥이♥갤로그로 이동합니다. 10.04 47 0
2894070 2찍이 실력 타령하는게 제일 이해 안돼 [3] 프갤러(223.63) 10.04 59 0
2894068 취미로 플밍하는새끼들 특징 [1] 프갤러(211.235) 10.04 94 0
2894067 판교어는 중견까지만 잘 쓰는듯. [2] 프갤러(211.177) 10.04 171 1
2894066 갈비 먹습니다. 넥도리아(220.74) 10.04 47 0
2894061 내가 맥주를 안먹는 이유 프갤러(210.217) 10.04 61 1
2894060 점심 간식 저녁 발명도둑잡기(118.216) 10.04 48 0
2894057 인스타 개인정보가 국외이전으로 피싱당해서 [2] 넥도리아(220.74) 10.04 64 0
2894055 이게 내 포트폴리온데 어디까지 취업가능함? [3] 프갤러(210.217) 10.04 127 2
2894053 추석 유흥 50% 할인 리스트?ㅋㅋㅋㅋㅋㅋㅋ ㅇㅇ(118.235) 10.04 73 0
2894051 와 경기 안좋아서 못나갈꺼 아니까 연봉을 [1] ㅇㅇ(211.234) 10.04 68 0
2894048 이거보면 윤석열이 얼마나 말아먹었는지 보이지 [2] 프갤러(210.217) 10.04 97 3
2894044 김종국 신부가 궁금하다 발명도둑잡기(118.216) 10.04 55 0
2894043 개발자는 두가지 분류가 있다. [1] 프갤러(210.217) 10.04 129 0
2894041 Distant Thunder – Andrew Wyeth 발명도둑잡기(118.216) 10.04 43 0
2894039 난 1찍들이 외치는 실력이라는거 안믿는다 ㅇㅇ(121.168) 10.04 64 0
2894037 추석연휴 10일이나 쉬니까 코딩좀 해야지 [1] 박민준갤로그로 이동합니다. 10.04 64 0
2894036 ■요즘 Si수준 신입 대세포폴이 뭐에요? [1] ㅇㅇ갤로그로 이동합니다. 10.04 83 0
2894034 [단독] 초봉 6300만원 신의 직장 날벼락…취준생 망연자실 무슨일이? 발명도둑잡기(118.216) 10.04 91 0
2894033 우드스톡, 인류역사상 최대의 축제[손호철의 미국사 뒤집어보기] 발명도둑잡기(118.216) 10.04 48 0
2894032 게이샤의 비극 소비하며 수동적 일 여성상 강화 발명도둑잡기(118.216) 10.04 34 0
2894031 it업계도 1v1 다이다이까서 결과가 나오면 좋은데 [1] 프갤러(210.217) 10.04 61 1
2894029 진짜 대한민국에 좆밥새끼들 너무 넘쳐나 ㅋㅋ 프갤러(210.217) 10.04 57 1
2894028 ㅆㅇㅆ는 수재다 [1] 발명도둑잡기(118.216) 10.04 71 0
2894027 나도 바이브코딩으로 크몽 해볼까 [2] 발명도둑잡기(118.216) 10.04 84 0
2894026 gcc rust [1] 발명도둑잡기(118.216) 10.04 50 0
2894023 ㅆㅇㅆ는 뛰어봣자 벼룩임 [1] 프갤러(210.217) 10.04 267 5
2894019 사실 나에게 휴일이란 [1] 발명도둑잡기(118.216) 10.04 49 0
2894018 338688 맞대응) 프듀48 주작과 S엔터 ㅇㅇ(175.223) 10.04 65 0
2894015 차단한 병신 왜 자꾸 헛소리하냐 ㅆㅇㅆ찡갤로그로 이동합니다. 10.04 42 0
2894010 빕스갔다 왔더니 ㅆㅇㅆ새끼 또 개소리하네 ㅋㅋ 프갤러(210.217) 10.04 86 5
2894006 너네 PWA로 설정해두면 휴대폰으로 앱처럼 할 수있단거 알았냐 [2] ㅆㅇㅆ(124.216) 10.04 46 0
2894004 근데 실제 산업에서 AI 쓰는건 에어플로우같은거로 하나? ㅆㅇㅆ(124.216) 10.04 44 0
2894001 프로그래머 실력 고만고만하다. 그렇게 생각하던 시절이 제게도 있었죠 [3] 프갤러(221.146) 10.04 101 0
2894000 이 현상 뭐가 문제인 거냐?? [4] 프갤러(114.204) 10.04 67 0
2893999 님들 저 졸업작품주제 추천좀요 ㅠㅠㅠㅠ [6] 공기역학갤로그로 이동합니다. 10.04 84 0
2893998 우리나라 지금 AI가 생각보다 많이 적용되고있음 [11] 프갤러(125.177) 10.04 117 0
2893997 코딩은 재능보단 뭘 만들고 싶은지가 있어야해. [2] ㅆㅇㅆ(124.216) 10.04 117 1
2893994 업무용 데탑으로서의 Weston [2] 나르시갤로그로 이동합니다. 10.04 73 0
2893993 추석 유흥 50% 할인 리스트?ㅋㅋㅋㅋㅋㅋㅋ ㅇㅇ(39.7) 10.04 38 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2