디시인사이드 갤러리

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

갤러리 본문 영역

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

나르시갤로그로 이동합니다. 2025.09.27 17:33:34
조회 65 추천 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
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 우리나라를 대표해서 UN 연설자로 내보내고 싶은 스타는? 운영자 25/09/29 - -
AD 프로게이머가 될테야!! 운영자 25/10/01 - -
2892908 나님 조만간 퐁퐁영45티 글 하나 써봄 ♥냥덩이♥갤로그로 이동합니다. 09.29 42 0
2892907 대한민국 중국남자 무비자입국 절대적으로 막아야합니다 [2] ㅇㅇ갤로그로 이동합니다. 09.29 399 3
2892904 주가 떨어졌네 개떡 같은거 ㅎㅎ 나르시갤로그로 이동합니다. 09.29 42 0
2892903 블록체인으로 수익이 나는것자체가 세상이 모순덩어리인거지 [2] 타이밍뒷.통수한방(1.213) 09.29 61 0
2892897 MCP랑 랭체인은 재미없어보이네여 [4] PyTorch갤로그로 이동합니다. 09.29 76 0
2892896 애새끼좀 더 번식해라 이기이기 ㅋㅋㅋㅋ 타이밍뒷.통수한방(1.213) 09.29 31 0
2892895 [대한민국] 주한미군 사령관 중장 표기 프갤러(121.172) 09.29 40 0
2892894 카톡을 대체할 개쩌는 메신저 만들어봐라 ㅇㅇ갤로그로 이동합니다. 09.29 61 0
2892884 질문글삭뭐냐고 루도그담당(211.184) 09.29 50 0
2892880 개발자새끼들 뭐좀 더 안다고 깝치지좀 마라 ㅇㅇ; [6] 프갤러(118.33) 09.29 144 2
2892879 플러터 쓰는데 gradle 이거 세팅하기 존나 좆같다 프갤러(222.121) 09.29 56 0
2892878 자러간다~ ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09.29 31 0
2892872 피곤하다 [2] 루도그담당(211.184) 09.29 53 0
2892865 수제 햄버거집 몰카 ㅇㅅㅇ [2] 헤르 미온느갤로그로 이동합니다. 09.29 68 0
2892864 태연 ㅇㅅㅇ 헤르 미온느갤로그로 이동합니다. 09.29 36 0
2892863 하루 한 번 헤르미온느 찬양 헤르 미온느갤로그로 이동합니다. 09.29 58 0
2892861 3500억 $ -> imf -> 알짜기업 팔림 -> 망국 프갤러(175.197) 09.29 112 0
2892860 지드래곤 ♥냥덩이♥갤로그로 이동합니다. 09.29 62 0
2892859 귀염 ♥냥덩이♥갤로그로 이동합니다. 09.29 37 0
2892858 프랑스 사태 보면 나님 예지몽 ㄹㅇ 인듯 ♥냥덩이♥갤로그로 이동합니다. 09.29 56 1
2892857 프갤 켜니 화면주사율이 일정해짐. 다른거 하면 이상해지네.. DVI소프펌 넥도리아(220.74) 09.29 55 0
2892856 다카이치 사나에 - 닥터때바라 닮음 (둘다 빌런대장) ㅇㅇ(175.197) 09.29 40 0
2892855 앱히키 씨발년아 뒤져라 [1] ㅇㅇ(222.108) 09.29 61 0
2892854 인지과학조져라 손발이시립디다갤로그로 이동합니다. 09.29 63 0
2892853 자고 일어나서 빌드하면 드디어 타로 일일 운세까지는 완성하겠네 [2] ㅆㅇㅆ(124.216) 09.29 53 0
2892852 AMI를 vmdk로 추출 후 vmware에서 부팅해본사람 ㅇㅇ갤로그로 이동합니다. 09.29 36 0
2892849 스레드가 뭔지도 모르는 새끼가 왜 비동기로 개념싸움 거는거야 [2] ㅇㅇ(106.241) 09.29 80 1
2892843 밥버러지... 고기도 익고... 명절한상 1주 시작. 넥도리아(220.74) 09.29 76 0
2892842 파이썬 질문인데 sha256 체크섬이 일치하지 않는다고 뜨는데.. [1] 프갤러(125.249) 09.29 69 0
2892841 ㅅㅂ... 알콜중독인가 잠이안와서 갈비탕 한그릇에 맥주깠다 ㅇㅇ(223.38) 09.29 36 0
2892840 밥 언재끔 커피 뿌려주었는데... 넥도리아(220.74) 09.29 77 0
2892839 밥짓는중. 넥도리아(220.74) 09.29 36 0
2892834 운영체제 충 돼서, 운영체제 모르면 개발이 불가능하다 생각하는데 ㅇㅇ(106.241) 09.29 65 0
2892832 저희는 가짜 프로그래머입니다. [1] 프갤러(110.8) 09.29 91 0
2892830 여기서 좀 정상적인 글쓰면 저능아들 꼬이는 그게 문제긴함 [1] ㅆㅇㅆ(124.216) 09.29 72 0
2892829 님들 진짜 프로그래머 맞나요 [3] Fjeoeieie갤로그로 이동합니다. 09.28 125 0
2892828 드이어 야구 동영상 옮긴다. 외장 볼륨있게 넥도리아(220.74) 09.28 41 0
2892824 나님 월 마일리지 인증 [7] ♥냥덩이♥갤로그로 이동합니다. 09.28 132 0
2892823 나님 이민 전략 칼럼 하나 쓰긴 써야하는데 [3] ♥냥덩이♥갤로그로 이동합니다. 09.28 93 0
2892804 나님 한국자격증 다 외국자격증으로 바꾸는중 [5] ♥냥덩이♥갤로그로 이동합니다. 09.28 114 0
2892788 클로드랑 GPT 물어봐서 앱 만들었어요 [2] zian갤로그로 이동합니다. 09.28 83 0
2892783 얼룩젖소무늬의 비밀 [1] ♥냥덩이♥갤로그로 이동합니다. 09.28 62 0
2892772 ❤+ [3] ♥냥덩이♥갤로그로 이동합니다. 09.28 101 0
2892769 오늘은 뭐할까 고민되네 ㅠㅠ 나르시갤로그로 이동합니다. 09.28 40 0
2892766 병신찐따 영포티 ㅋㅅㅋ ♥냥덩이♥갤로그로 이동합니다. 09.28 79 0
2892764 어흥! 호피무늬 모모링❤ [4] ♥냥덩이♥갤로그로 이동합니다. 09.28 119 0
2892761 인텔 ddr6 램64 10코어 이상 15w 미만 소비전력 아니면 안사줌 ♥냥덩이♥갤로그로 이동합니다. 09.28 43 0
2892754 주기적으로 컴퓨터, 노트북, 폰 포맷하는데 이상하나 ㅇㅇ(106.241) 09.28 39 0
2892753 웹개발 관련 여기서 물어봄? [2] Noitamina갤로그로 이동합니다. 09.28 81 0
2892747 ❤✨☀⭐⚡☘⛩나님 시작합니당⛩☘⚡⭐☀✨❤ ♥냥덩이♥갤로그로 이동합니다. 09.28 28 0
뉴스 ‘얼굴 천재’ 송강, 팬 품으로 복귀…차은우 공백 속 대세 행보 예고 디시트렌드 10.02
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2