You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
(2) |
Jun
(47) |
Jul
(47) |
Aug
(75) |
Sep
(6) |
Oct
(5) |
Nov
|
Dec
(5) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(2) |
Feb
(5) |
Mar
(5) |
Apr
|
May
|
Jun
(1) |
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(5) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(1) |
|
From: Masao M. <mu...@hi...> - 2002-06-11 15:31:18
|
むとうです。 On Wed, 12 Jun 2002 00:07:05 +0900 Hiroshi Kuwagata <kg...@ko...> wrote: > On <200...@hi...> > wrote by Masao Mutoh <mu...@hi...>: > > >> むとうです。 > > 桑形です。 > > #今度は自宅です :-) お疲れさまです。 > >> > できれば、GTKの実装でも整数値の直値を設定してますし > >> > Gdkの定数定義でもGdkAtomではなく整数(enum)で設定し > >> > てますのでそっちからの流入者や仕様参考の元を考慮する > >> > と整数も受け付けた方がいいとは思います。 > >> > >> GdkSelectionTypeの説明のところにも以下のように書いてありますので、 > >> 本来は(GTK+でも)GdkAtomで定義すべきだと思います。 > >> > >> The GdkSelectionType enumeration contains predefined atom values > >> used to represent the types of data transferred in response to > >> a request for a target. > >> > >> > >> もし、整数値を受け付けるようにしたいというので > >> あれば、Gdk::Atom.new(integer)を用意してそれを使った方が良いと思います。 > >> ただし、通常はGdk::Atom#internを使うため、滅多に使われるものではないと思います。 > > 私の経験上微妙なとこですねぇ。 > GDKの使い方なんてGTKのソースを見るぐらいしか身近な > 資料が無いですし。 > > #GTKじゃモロ 32 なんて打ってある箇所がある(^^; > > どかかにRuby/GTKでのGDKアクセスのガイドなんかがあって > そこに『こういう経緯でRuby/GTKではこうしてる』ってのが > 明記してあれば良いとは思うのですが。 将来的にはそのようなドキュメントもあれば良いなと思います。 が、それよりもまずはAPIリファレンスですよね....。それすら無い現状....。 > >> そうですね。そうしましょう。 > >> ただ、Gdk::SELECTION_TYPE_*は、Gdk::Selection::TYPE_*を使うことにしましょう。 > >> 実は、GTK+はenumを使っている関係で、クラス名とそこで使われる定数名の関係 > >> が冗長だと思っています。 > >> この辺はいつかRuby-GNOME2の方で議論したいと思います。 > >> #まだそれをまとめている時間がないんで。 > > 『Gdk::Atomと整数』の件にも絡む問題ですが、名前空間の取り方 > がオリジナルと特定の物だけ中途半端に変わるのは余計に混乱し > そうなのですが…さっきも書いた通りそれでひっかかったクチでも > あるので。 > > まだRuby/GNOME(1)では未整理ってことでGdkモジュールに全部押し > 込んである方が良いような。 逆にその変更を今からやるというのはちょっとどうかと。 それにこのようなモノは本来ドキュメントを整備することで解決することであって 実装で解決すべきモノではないと思います。 #つまり、GTK+関連のドキュメントを見なくてもコーディングできる・・・理想ですが。 > #Gdk::Selection::TYPE_*を既に使ってるアプリがあるなら > #仕方が無いと思いますが。 あえて言えば、sample/dnd.rbが使ってます。 > >> 私はバリバリC言語でコーディングしたことがあるわけではないので > >> この辺の背景はよくわからないのですが、gdbあたりでバックトレースを > >> とればすむ話なような。 > >> #そういうものではない? > > えぇ、コンパイルエラーだと『gdbで…』ってとこまで行け > ませんから :-) > > #ローダブルオブジェクトが出来ないので(^^; あ、コンパイラエラーか。 目で追ってもわからないコードを書く人たちでプロジェクトを回さなければ ならない場合であればそうかもしれませんね。 Ruby/GTKのコードを書く場合は問題ないでしょう;->。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Hiroshi K. <kg...@ko...> - 2002-06-11 15:07:12
|
On <200...@hi...>
wrote by Masao Mutoh <mu...@hi...>:
>> むとうです。
桑形です。
#今度は自宅です :-)
>> > できれば、GTKの実装でも整数値の直値を設定してますし
>> > Gdkの定数定義でもGdkAtomではなく整数(enum)で設定し
>> > てますのでそっちからの流入者や仕様参考の元を考慮する
>> > と整数も受け付けた方がいいとは思います。
>>
>> GdkSelectionTypeの説明のところにも以下のように書いてありますので、
>> 本来は(GTK+でも)GdkAtomで定義すべきだと思います。
>>
>> The GdkSelectionType enumeration contains predefined atom values
>> used to represent the types of data transferred in response to
>> a request for a target.
>>
>>
>> もし、整数値を受け付けるようにしたいというので
>> あれば、Gdk::Atom.new(integer)を用意してそれを使った方が良いと思います。
>> ただし、通常はGdk::Atom#internを使うため、滅多に使われるものではないと思います。
私の経験上微妙なとこですねぇ。
GDKの使い方なんてGTKのソースを見るぐらいしか身近な
資料が無いですし。
#GTKじゃモロ 32 なんて打ってある箇所がある(^^;
どかかにRuby/GTKでのGDKアクセスのガイドなんかがあって
そこに『こういう経緯でRuby/GTKではこうしてる』ってのが
明記してあれば良いとは思うのですが。
まぁ、パッチの方は合わすようにしておきましょう。
>> つまり、GDKの実装が間違えてるんじゃないかとふと思ったということです。
>> で、GDKのソースを見てみたんですが、正直よくわかりませんでした。
実際の話は知りませんが gdk_selection_send_notify()は外部の
Windowに対して行なうのがほとんどなので(外部のWindowに関して
はGTKやGDKは能動的に感知ない思想でありますし)、
おおもとのトリガであるSelectionRequestイベント発生時にXサーバ
から渡されるWindow IDのまま処理を進める方が楽と言う見方も
あります。
#GTK+/GDKの実行主体がX11なのでそっちでの実行効率を
#重視ってのも大きいと思います
GdkEventSelectionDataのrequestorも同様の理由で gint32に
なってると。
>> そうですね。そうしましょう。
>> ただ、Gdk::SELECTION_TYPE_*は、Gdk::Selection::TYPE_*を使うことにしましょう。
>> 実は、GTK+はenumを使っている関係で、クラス名とそこで使われる定数名の関係
>> が冗長だと思っています。
>> この辺はいつかRuby-GNOME2の方で議論したいと思います。
>> #まだそれをまとめている時間がないんで。
『Gdk::Atomと整数』の件にも絡む問題ですが、名前空間の取り方
がオリジナルと特定の物だけ中途半端に変わるのは余計に混乱し
そうなのですが…さっきも書いた通りそれでひっかかったクチでも
あるので。
まだRuby/GNOME(1)では未整理ってことでGdkモジュールに全部押し
込んである方が良いような。
#Gdk::Selection::TYPE_*を既に使ってるアプリがあるなら
#仕方が無いと思いますが。
>> 私はバリバリC言語でコーディングしたことがあるわけではないので
>> この辺の背景はよくわからないのですが、gdbあたりでバックトレースを
>> とればすむ話なような。
>> #そういうものではない?
えぇ、コンパイルエラーだと『gdbで…』ってとこまで行け
ませんから :-)
#ローダブルオブジェクトが出来ないので(^^;
ζ
---- ^^y-
くわがた@自宅
kg...@ko... − 年年歳歳花相似 歳歳年年人不同 −
|
|
From: Masao M. <mu...@hi...> - 2002-06-11 14:11:20
|
むとうです。
On Tue, 11 Jun 2002 22:21:52 +0900
Hiroshi Kuwagata <kg...@ko...> wrote:
> On <200...@hi...>
> wrote by Masao Mutoh <mu...@hi...>:
> >> これ見て思い出したのですが、Gdk::SELECTION_TYPE_* という定数値はすでに
> >> Gdk::Selection::TYPE_* という形で定義されていますので、
> >> そちらを使用してください。全部Gdk::Atomとして定義されています。
> >> #Gdk::Atomになるべきところは全てGdk::Atomにすべきでしょう。
>
> できれば、GTKの実装でも整数値の直値を設定してますし
> Gdkの定数定義でもGdkAtomではなく整数(enum)で設定し
> てますのでそっちからの流入者や仕様参考の元を考慮する
> と整数も受け付けた方がいいとは思います。
GdkSelectionTypeの説明のところにも以下のように書いてありますので、
本来は(GTK+でも)GdkAtomで定義すべきだと思います。
The GdkSelectionType enumeration contains predefined atom values
used to represent the types of data transferred in response to
a request for a target.
もし、整数値を受け付けるようにしたいというので
あれば、Gdk::Atom.new(integer)を用意してそれを使った方が良いと思います。
ただし、通常はGdk::Atom#internを使うため、滅多に使われるものではないと思います。
> >> > rbgdkselection.c
> >> > Gdk::Selection::send_notifyのproperty指定でNILを
> >> > 受け付けるように(GDK_NONEに変換)
> >>
> >> ふと思ったのですが、gdk_selection_send_notify()の第1引数requesterって、
> >> GdkWindow*の間違いじゃないですかね...。
>
> gdk_selection_send_notify()ですよね?
> GDK Reference Manualやgdk.hではgint32ですが?
つまり、GDKの実装が間違えてるんじゃないかとふと思ったということです。
で、GDKのソースを見てみたんですが、正直よくわかりませんでした。
> >> 修正の方は、くわがたさんにお願いしてよろしいですか。
> >> お忙しいようでしたら私の方でやりますが、できればお願いしたいです。
>
> 時間は少々ありますのでこっちでやっておきます。
よろしくお願いしますm(__)m。
> #Gdk::PROP_MODE_*もGDK上での型はGdkPropMode型です。
> Ruby/GNOME(1)の方は既にアプリが書かれてるので影響が
> 大きいと思いますのでこのままで行った方が混乱が少な
> いのでは無いかと思います。
> Ruby/GNOME2の方はきっちり詰めるのに賛成です。
そうですね。そうしましょう。
ただ、Gdk::SELECTION_TYPE_*は、Gdk::Selection::TYPE_*を使うことにしましょう。
実は、GTK+はenumを使っている関係で、クラス名とそこで使われる定数名の関係
が冗長だと思っています。
この辺はいつかRuby-GNOME2の方で議論したいと思います。
#まだそれをまとめている時間がないんで。
> #思わぬ所で影響でそうですし
> ##もっとも私が作る物がRuby/GDKなだけと言う話も無きにしもあらず :-)
>
> コードの書き方をどうこうしたいと言う話でなくてただの閑話
> なので聞き流してもらっても良いのですが、ちと興味があるので。
> 私がCを書きはじめた頃って
>
> >> static VALUE
> >> gdkwin_prop_delete(self, property)
> >> VALUE self, property;
> >> {
> >> gdk_property_delete(get_gdkwindow(self), get_gdkatom(property));
> >> return self;
> >> }
>
> こういう書き方をすると、引数にエラーがあった場合エラー
> 発生箇所の特定がややこしい場合があるので、『最適化して
> 出力コードに影響が無いような場合はローカル変数に展開し
> た方が良い』って教えられたんですが、最近はそういうの無
> いのでしょうか?
> 昔のコンパイラのエラー出力がタコだったと言うだけかも知
> れませんが(^^;
私はバリバリC言語でコーディングしたことがあるわけではないので
この辺の背景はよくわからないのですが、gdbあたりでバックトレースを
とればすむ話なような。
#そういうものではない?
それでは。
--
.:% Masao Mutoh<mu...@hi...>
|
|
From: Hiroshi K. <kg...@ko...> - 2002-06-11 13:21:59
|
On <200...@hi...>
wrote by Masao Mutoh <mu...@hi...>:
>> むとうです。
桑形です。
#仕事場から自宅にloginで現実逃避です :-)
>> まず、お願いです。これは、少しでもメンテナである
>> 私の作業量を減らすためのものです。
>> ポリシーの違いなどもあるとは思うのですが、
>> コードに統一感を持たせたいと思いますのでご協力お願いします。
>> #コーディングルール作らないとダメかな、やっぱ。
どこかに規約があればありがたいですが、スペースの位置とかは
よっぽどでない限りアバウトでいいとも思いますが。
>> ・メソッド名などは以下のように記述してください
>> hoge( a, b, c) -> hoge(a, b, c)
>> fuga[ a, b, c] -> fuga[a, b, c]
>> (引数の間のスペースに注意してください)
まぁ、重要な様なのであわせておきます。
>> ・diffは -u で取ってください
了解です。
>> ・変数名はなるべく3バイト以上、かつ意味のある名称を使ってください。
>> これは、エディタの検索機能を有効にするためです。
>> 短いメソッドでは1バイトの変数名でも気になりませんが、長いメソッドの場合
>> 追うのがつらいです。
>>
>> ・なるべくローカル変数の宣言は減らしましょう
>> 例えば、
>>
>> static VALUE
>> gdkwin_prop_delete(self, property)
>> VALUE self, property;
>> {
>> GdkWindow* w;
>> GdkAtom p;
>>
>> w = get_gdkwindow(self);
>> p = get_gdkatom(property);
>>
>> gdk_property_delete( w, p);
>>
>> return self;
>> }
>>
>> は、以下のように書きましょう。
>>
>> static VALUE
>> gdkwin_prop_delete(self, property)
>> VALUE self, property;
>> {
>> gdk_property_delete(get_gdkwindow(self), get_gdkatom(property));
>> return self;
>> }
あわせておきます。
>> 以下は、パッチに対するコメントです。
>>
>> On Tue, 11 Jun 2002 00:58:01 +0900
>> Hiroshi Kuwagata <kg...@ko...> wrote:
>>
>> > Gdk::Window#property_change
>> > typeでGdk::SELECTION_TYPE_ATOMが指定された場合の動作。
>>
>> これ、配列使うんですね。
>> であれば、 ALLOCA_N()を使った方が良いと思います。
>>
>> > typeでCOMPOUND_TEXTが指定された時にgdk_string_to_compound_text
>> > でエンコードを行なうように変更
>>
>> COMPOUND_TEXTのatom値自体も定数値として定義しても良いかもしれませんね。
>> Rubyの独自拡張になってしまうかもしれませんが。
Cで書いたものや他のバインドとの読み比べの時に問題になる
程でも無ければそれでいいと思いますが。
>> > Gdk::Window#propery_get
>> > 追加
>>
>> rb_Integer使ってるところって、INT2NUM()ではまずいですか?
いえ、全然まずくないです。
#というかこっちの間違いと言うか :-)
>> > rbgdkatom.c
>> > Gdk::Atomと整数値の比較をサポート
>> > (Gdk::SELECTION_TYPE_*がFixnumなので)
>>
>> これ見て思い出したのですが、Gdk::SELECTION_TYPE_* という定数値はすでに
>> Gdk::Selection::TYPE_* という形で定義されていますので、
>> そちらを使用してください。全部Gdk::Atomとして定義されています。
>> #Gdk::Atomになるべきところは全てGdk::Atomにすべきでしょう。
できれば、GTKの実装でも整数値の直値を設定してますし
Gdkの定数定義でもGdkAtomではなく整数(enum)で設定し
てますのでそっちからの流入者や仕様参考の元を考慮する
と整数も受け付けた方がいいとは思います。
>> > rbgdkselection.c
>> > Gdk::Selection::send_notifyのproperty指定でNILを
>> > 受け付けるように(GDK_NONEに変換)
>>
>> ふと思ったのですが、gdk_selection_send_notify()の第1引数requesterって、
>> GdkWindow*の間違いじゃないですかね...。
gdk_selection_send_notify()ですよね?
GDK Reference Manualやgdk.hではgint32ですが?
#http://developer.gnome.org/doc/API/gdk/gdk-selections.html
もっとも、私がいじる以前からそこはその仕様だったので
なんとも言いようがありませんが。
>> 修正の方は、くわがたさんにお願いしてよろしいですか。
>> お忙しいようでしたら私の方でやりますが、できればお願いしたいです。
時間は少々ありますのでこっちでやっておきます。
>> ところで。
>> Gdk::Selectionってモジュールですね。Gdk::Propertyをモジュールに
>> しない方が良いって言ったくせに < 自分(^^;)。
>> この辺も今後整理していきましょう。
気付いてはいましたが、件の定数はGdkSelectionTypeであって
GdkSelectionでは無いですし、既にGdk::PROP_MODE_*のあたりで
変則されてたように思ったので反論せずに、Gdk::SELECTION_TYPE_*
に設定してます。
#Gdk::PROP_MODE_*もGDK上での型はGdkPropMode型です。
Ruby/GNOME(1)の方は既にアプリが書かれてるので影響が
大きいと思いますのでこのままで行った方が混乱が少な
いのでは無いかと思います。
Ruby/GNOME2の方はきっちり詰めるのに賛成です。
#思わぬ所で影響でそうですし
##もっとも私が作る物がRuby/GDKなだけと言う話も無きにしもあらず :-)
コードの書き方をどうこうしたいと言う話でなくてただの閑話
なので聞き流してもらっても良いのですが、ちと興味があるので。
私がCを書きはじめた頃って
>> static VALUE
>> gdkwin_prop_delete(self, property)
>> VALUE self, property;
>> {
>> gdk_property_delete(get_gdkwindow(self), get_gdkatom(property));
>> return self;
>> }
こういう書き方をすると、引数にエラーがあった場合エラー
発生箇所の特定がややこしい場合があるので、『最適化して
出力コードに影響が無いような場合はローカル変数に展開し
た方が良い』って教えられたんですが、最近はそういうの無
いのでしょうか?
昔のコンパイラのエラー出力がタコだったと言うだけかも知
れませんが(^^;
#ま、そのせいで他の箇所の書き方にあわせたつもりでも
#気が抜けた箇所では件のコードの様になってしまう訳な
#のですが(^^;
ζ
---- ^^y-
くわがた@自宅
kg...@ko... − 年年歳歳花相似 歳歳年年人不同 −
|
|
From: Masao M. <mu...@hi...> - 2002-06-11 12:32:52
|
むとうです。
まず、お願いです。これは、少しでもメンテナである
私の作業量を減らすためのものです。
ポリシーの違いなどもあるとは思うのですが、
コードに統一感を持たせたいと思いますのでご協力お願いします。
#コーディングルール作らないとダメかな、やっぱ。
・メソッド名などは以下のように記述してください
hoge( a, b, c) -> hoge(a, b, c)
fuga[ a, b, c] -> fuga[a, b, c]
(引数の間のスペースに注意してください)
・diffは -u で取ってください
・変数名はなるべく3バイト以上、かつ意味のある名称を使ってください。
これは、エディタの検索機能を有効にするためです。
短いメソッドでは1バイトの変数名でも気になりませんが、長いメソッドの場合
追うのがつらいです。
・なるべくローカル変数の宣言は減らしましょう
例えば、
static VALUE
gdkwin_prop_delete(self, property)
VALUE self, property;
{
GdkWindow* w;
GdkAtom p;
w = get_gdkwindow(self);
p = get_gdkatom(property);
gdk_property_delete( w, p);
return self;
}
は、以下のように書きましょう。
static VALUE
gdkwin_prop_delete(self, property)
VALUE self, property;
{
gdk_property_delete(get_gdkwindow(self), get_gdkatom(property));
return self;
}
----
以下は、パッチに対するコメントです。
On Tue, 11 Jun 2002 00:58:01 +0900
Hiroshi Kuwagata <kg...@ko...> wrote:
> Gdk::Window#property_change
> typeでGdk::SELECTION_TYPE_ATOMが指定された場合の動作。
これ、配列使うんですね。
であれば、 ALLOCA_N()を使った方が良いと思います。
> typeでCOMPOUND_TEXTが指定された時にgdk_string_to_compound_text
> でエンコードを行なうように変更
COMPOUND_TEXTのatom値自体も定数値として定義しても良いかもしれませんね。
Rubyの独自拡張になってしまうかもしれませんが。
> Gdk::Window#propery_get
> 追加
rb_Integer使ってるところって、INT2NUM()ではまずいですか?
> rbgdkatom.c
> Gdk::Atomと整数値の比較をサポート
> (Gdk::SELECTION_TYPE_*がFixnumなので)
これ見て思い出したのですが、Gdk::SELECTION_TYPE_* という定数値はすでに
Gdk::Selection::TYPE_* という形で定義されていますので、
そちらを使用してください。全部Gdk::Atomとして定義されています。
#Gdk::Atomになるべきところは全てGdk::Atomにすべきでしょう。
> rbgdkselection.c
> Gdk::Selection::send_notifyのproperty指定でNILを
> 受け付けるように(GDK_NONEに変換)
ふと思ったのですが、gdk_selection_send_notify()の第1引数requesterって、
GdkWindow*の間違いじゃないですかね...。
修正の方は、くわがたさんにお願いしてよろしいですか。
お忙しいようでしたら私の方でやりますが、できればお願いしたいです。
ところで。
Gdk::Selectionってモジュールですね。Gdk::Propertyをモジュールに
しない方が良いって言ったくせに < 自分(^^;)。
この辺も今後整理していきましょう。
--
.:% Masao Mutoh<mu...@hi...>
|
|
From: Hiroshi I. <ig...@ru...> - 2002-06-10 23:00:46
|
いがらしです。 At Mon, 10 Jun 2002 00:26:38 +0900, Masao Mutoh <mu...@hi...> wrote: > > ruby 1.7の最新版を取得して試してみたらいがらしさんと > 同様なMakefileを生成してしまいました(intall行が2行ある)。 > > ただ、インストールはそのまま問題なくできました。 > (どちらのディレクトリでも) そうですか。こちらではやはり、どちらのディレクトリでも gnome.rbがインストールされません。 バージョンは以下の通りです ruby 1.7.2 (2002-06-10) [i686-linux] GNU Make version 3.79.1, by Richard Stallman and Roland McGrath. -- 五十嵐 宏 (Hiroshi IGARASHI) |
|
From: Hiroshi K. <kg...@ko...> - 2002-06-10 17:17:22
|
再度桑形です。
On <200...@yo...>
wrote by Hiroshi Kuwagata <kg...@ko...>:
>> 桑形です。
>>
>> >> やはりそうでしたか。なるほど。
>>
>> です。
>>
>> >> こちらですが、ひとまずruby-gnomeには適用しました。
>>
>> 作業がかぶってしまいしたが、こちらでも実用レベルにまで
>> 持っていくために以下の追加を行ないました。
>> 変更点は以下の通りです。
パッチを出して早速なのですが、gdkwin_prop_change()で
Gdk::SELECTION_TYPE_ATOMを指定された時の動作にバグが
ありましたので修正したパッチを送付します。
#整数値を受け取る場合があるのを忘れてました
先程のメールのパッチは破棄して、このメールのパッチを
使って下さい。
ζ
---- ^^y-
くわがた@自宅
kg...@ko... − 年年歳歳花相似 歳歳年年人不同 −
--- ここから [new patch]
diff -c -r --exclude=CVS ruby-gnome/gtk/ChangeLog ruby-gnome.new/gtk/ChangeLog
*** ruby-gnome/gtk/ChangeLog Tue Jun 11 00:17:18 2002
--- ruby-gnome.new/gtk/ChangeLog Mon Jun 10 21:56:55 2002
***************
*** 1,7 ****
- Tue Jun 11 00:17:22 2002 Masao Mutoh <mu...@hi...>
-
- * src/rbgdkwindow.c: code cleanup in gdkwin_prop_change().
-
Sun Jun 09 22:59:40 2002 Hiroshi Kuwagata <kg...@ko...>
* src/rbgdkatom.c,src/rbgdkconst.c,src/rbgdkevent.c,src/rbgdkwindow.c:
--- 1,3 ----
diff -c -r --exclude=CVS ruby-gnome/gtk/src/rbgdkatom.c ruby-gnome.new/gtk/src/rbgdkatom.c
*** ruby-gnome/gtk/src/rbgdkatom.c Sun Mar 3 05:13:58 2002
--- ruby-gnome.new/gtk/src/rbgdkatom.c Tue Jun 11 00:05:29 2002
***************
*** 41,47 ****
gdkatom_eq(self, other)
VALUE self, other;
{
! return (get_gdkatom(self) == get_gdkatom(other)) ? Qtrue : Qfalse;
}
void
--- 41,53 ----
gdkatom_eq(self, other)
VALUE self, other;
{
! switch( TYPE( other)){
! case T_FIXNUM:
! return (get_gdkatom(self) == NUM2INT(other)) ? Qtrue : Qfalse;
!
! default:
! return (get_gdkatom(self) == get_gdkatom(other)) ? Qtrue : Qfalse;
! }
}
void
diff -c -r --exclude=CVS ruby-gnome/gtk/src/rbgdkconst.c ruby-gnome.new/gtk/src/rbgdkconst.c
*** ruby-gnome/gtk/src/rbgdkconst.c Sun Jun 9 23:28:13 2002
--- ruby-gnome.new/gtk/src/rbgdkconst.c Mon Jun 10 23:48:12 2002
***************
*** 334,346 ****
rb_define_const(mGdk, "RGB_DITHER_MAX", INT2FIX(GDK_RGB_DITHER_MAX));
/* GdkSelectionType */
! rb_define_const(mGdk, "SELECTION_TYPE_ATOM", INT2FIX(GDK_SELECTION_TYPE_ATOM));
! rb_define_const(mGdk, "SELECTION_TYPE_BITMAP", INT2FIX(GDK_SELECTION_TYPE_BITMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_COLORMAP", INT2FIX(GDK_SELECTION_TYPE_COLORMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_DRAWABLE", INT2FIX(GDK_SELECTION_TYPE_DRAWABLE));
! rb_define_const(mGdk, "SELECTION_TYPE_INTEGER", INT2FIX(GDK_SELECTION_TYPE_INTEGER));
! rb_define_const(mGdk, "SELECTION_TYPE_PIXMAP", INT2FIX(GDK_SELECTION_TYPE_PIXMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_WINDOW", INT2FIX(GDK_SELECTION_TYPE_WINDOW));
! rb_define_const(mGdk, "SELECTION_TYPE_STRING", INT2FIX(GDK_SELECTION_TYPE_STRING));
}
--- 334,354 ----
rb_define_const(mGdk, "RGB_DITHER_MAX", INT2FIX(GDK_RGB_DITHER_MAX));
/* GdkSelectionType */
! rb_define_const(mGdk, "SELECTION_TYPE_ATOM",
! INT2FIX(GDK_SELECTION_TYPE_ATOM));
! rb_define_const(mGdk, "SELECTION_TYPE_BITMAP",
! INT2FIX(GDK_SELECTION_TYPE_BITMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_COLORMAP",
! INT2FIX(GDK_SELECTION_TYPE_COLORMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_DRAWABLE",
! INT2FIX(GDK_SELECTION_TYPE_DRAWABLE));
! rb_define_const(mGdk, "SELECTION_TYPE_INTEGER",
! INT2FIX(GDK_SELECTION_TYPE_INTEGER));
! rb_define_const(mGdk, "SELECTION_TYPE_PIXMAP",
! INT2FIX(GDK_SELECTION_TYPE_PIXMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_WINDOW",
! INT2FIX(GDK_SELECTION_TYPE_WINDOW));
! rb_define_const(mGdk, "SELECTION_TYPE_STRING",
! INT2FIX(GDK_SELECTION_TYPE_STRING));
}
diff -c -r --exclude=CVS ruby-gnome/gtk/src/rbgdkselection.c ruby-gnome.new/gtk/src/rbgdkselection.c
*** ruby-gnome/gtk/src/rbgdkselection.c Sun Mar 3 05:13:58 2002
--- ruby-gnome.new/gtk/src/rbgdkselection.c Tue Jun 11 00:03:26 2002
***************
*** 58,66 ****
gdkselection_send_notify(self, requestor, selection, target, property, time)
VALUE self, requestor, selection, target, property, time;
{
! gdk_selection_send_notify(NUM2INT(requestor), get_gdkatom(selection),
! get_gdkatom(target), get_gdkatom(property),
! NUM2INT(time));
return Qnil;
}
--- 58,70 ----
gdkselection_send_notify(self, requestor, selection, target, property, time)
VALUE self, requestor, selection, target, property, time;
{
! if( property == Qnil){
! gdk_selection_send_notify(NUM2INT(requestor), get_gdkatom(selection),
! get_gdkatom(target), GDK_NONE, NUM2INT(time));
! } else {
! gdk_selection_send_notify(NUM2INT(requestor), get_gdkatom(selection),
! get_gdkatom(target), get_gdkatom(property), NUM2INT(time));
! }
return Qnil;
}
diff -c -r --exclude=CVS ruby-gnome/gtk/src/rbgdkwindow.c ruby-gnome.new/gtk/src/rbgdkwindow.c
*** ruby-gnome/gtk/src/rbgdkwindow.c Tue Jun 11 00:17:19 2002
--- ruby-gnome.new/gtk/src/rbgdkwindow.c Tue Jun 11 01:06:44 2002
***************
*** 4,10 ****
rbgdkwindow.c -
$Author: mutoh $
! $Date: 2002/06/10 15:17:19 $
Copyright (C) 1998-2000 Yukihiro Matsumoto,
Daisuke Kanda,
--- 4,10 ----
rbgdkwindow.c -
$Author: mutoh $
! $Date: 2002/06/09 14:28:13 $
Copyright (C) 1998-2000 Yukihiro Matsumoto,
Daisuke Kanda,
***************
*** 301,351 ****
VALUE self, property, type, mode, src;
{
GdkWindow* w;
! int f, l, x;
! GdkAtom p, t;
! void* d;
! w = get_gdkwindow(self);
! p = get_gdkatom(property);
! t = get_gdkatom(type);
! if(t == GDK_SELECTION_TYPE_ATOM){
! x = (int)get_gdkatom(src);
! d = &x;
f = 32;
! l = 1;
} else if(t == GDK_SELECTION_TYPE_BITMAP){
! d = (void*)((GdkPixmapPrivate*)get_gdkbitmap(src))->xwindow;
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_COLORMAP){
! d = (void*)((GdkColormapPrivate*)get_gdkcolormap(src))->xcolormap;
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_INTEGER){
! x = NUM2INT(src);
! d = (void*)&x;
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_PIXMAP){
! d = (void*)((GdkPixmapPrivate*)get_gdkpixmap(src))->xwindow;
f = 32;
l = 1;
! } else if(t == GDK_SELECTION_TYPE_WINDOW || t == GDK_SELECTION_TYPE_DRAWABLE){
! d = (void*)((GdkPixmapPrivate*)get_gdkwindow(src))->xwindow;
f = 32;
l = 1;
! } else if(t == GDK_SELECTION_TYPE_STRING ||
! t == gdk_atom_intern("COMPOUND_TEXT", FALSE)){
! d = (void*)RSTRING(src)->ptr;
f = 8;
! l = RSTRING(src)->len;
} else {
rb_raise(rb_eArgError, "no supperted type.");
}
gdk_property_change(w, p, t, f, NUM2INT(mode), d, l);
}
VALUE gdkWindowAttr;
--- 301,461 ----
VALUE self, property, type, mode, src;
{
GdkWindow* w;
! int f, l;
! GdkAtom p, t;
! void* d;
!
! int integer;
! GdkAtom compound_text = gdk_atom_intern("COMPOUND_TEXT", FALSE);
! GdkAtom ot;
!
! w = get_gdkwindow(self);
! p = get_gdkatom(property);
! t = get_gdkatom(type);
! ot = t;
! if(t == GDK_SELECTION_TYPE_ATOM){
! int len = RARRAY( src)->len;
! d = (Atom*)xmalloc( sizeof( Atom) * len);
! for( integer = 0; integer < len; integer++){
! VALUE val = rb_ary_entry( src, integer);
!
! switch( TYPE( val)){
! case T_FIXNUM:
! ((Atom*)d)[ integer] = NUM2INT( val);
! break;
!
! default:
! ((Atom*)d)[ integer] = get_gdkatom( val);
! }
! }
f = 32;
! l = len;
!
} else if(t == GDK_SELECTION_TYPE_BITMAP){
! d = (void*)&(((GdkPixmapPrivate*)get_gdkbitmap(src))->xwindow);
f = 32;
l = 1;
+
} else if(t == GDK_SELECTION_TYPE_COLORMAP){
! d = (void*)&(((GdkColormapPrivate*)get_gdkcolormap(src))->xcolormap);
f = 32;
l = 1;
+
} else if(t == GDK_SELECTION_TYPE_INTEGER){
! integer = NUM2INT(src);
! d = (void*)&integer;
f = 32;
l = 1;
+
} else if(t == GDK_SELECTION_TYPE_PIXMAP){
! d = (void*)&(((GdkPixmapPrivate*)get_gdkpixmap(src))->xwindow);
f = 32;
l = 1;
!
! } else if(t == GDK_SELECTION_TYPE_WINDOW||t == GDK_SELECTION_TYPE_DRAWABLE){
! d = (void*)&(((GdkPixmapPrivate*)get_gdkwindow(src))->xwindow);
f = 32;
l = 1;
!
! } else if( t == GDK_SELECTION_TYPE_STRING) {
! d = RSTRING( src)->ptr;
f = 8;
! l = RSTRING( src)->len;
!
! } else if( t == gdk_atom_intern( "COMPOUND_TEXT", FALSE)){
! gdk_string_to_compound_text( RSTRING(src)->ptr, &t, &f, (guchar**)&d, &l);
!
} else {
rb_raise(rb_eArgError, "no supperted type.");
}
gdk_property_change(w, p, t, f, NUM2INT(mode), d, l);
+
+ if( ot == GDK_SELECTION_TYPE_ATOM) {
+ free( d);
+ } else if( ot == gdk_atom_intern( "COMPOUND_TEXT", FALSE)) {
+ gdk_free_compound_text(d);
+ }
+
+ return self;
+ }
+
+ static VALUE
+ gdkwin_prop_get(self, property, type, offset, length, delete)
+ VALUE self, property, type, offset, length, delete;
+ {
+ /* for argument processing */
+ GdkWindow* w;
+ GdkAtom p, t;
+ gulong o, l;
+ gint d;
+ GdkAtom rt;
+ gint rf, rl;
+ void* rd;
+
+ /* for inner processing */
+ int i;
+ VALUE ret;
+
+ w = get_gdkwindow( self);
+ p = get_gdkatom( property);
+ t = get_gdkatom( type);
+ o = NUM2INT( offset);
+ l = NUM2INT( length);
+ d = RTEST( delete);
+
+ if(gdk_property_get( w, p, t, o, l, d, &rt, &rf, &rl,(guchar**)&rd) == FALSE){
+ return Qnil;
+ }
+
+ switch( rf){
+ case 8:
+ default:
+ ret = rb_str_new( rd, rl);
+ break;
+
+ case 16:
+ ret = rb_ary_new();
+
+ for( i = 0; i < rl; i++){
+ rb_ary_push( ret, rb_Integer( ((unsigned short*)rd)[ i]));
+ }
+ break;
+
+ case 32:
+ ret = rb_ary_new();
+
+ if( rt != GDK_SELECTION_TYPE_ATOM){
+ for( i = 0; i < rl; i++){
+ rb_ary_push( ret, rb_Integer( ((unsigned long *)rd)[ i]));
+ }
+ } else {
+ for( i = 0; i < rl; i++){
+ rb_ary_push( ret, make_gdkatom( ((unsigned long *)rd)[ i]));
+ }
+ }
+ break;
+ }
+
+ return rb_ary_new3( 3, make_gdkatom( rt), ret, rb_Integer( rl));
+ }
+
+ static VALUE
+ gdkwin_prop_delete(self, property)
+ VALUE self, property;
+ {
+ GdkWindow* w;
+ GdkAtom p;
+
+ w = get_gdkwindow(self);
+ p = get_gdkatom(property);
+
+ gdk_property_delete( w, p);
+
+ return self;
}
VALUE gdkWindowAttr;
--- ここまで [new patch]
|
|
From: Hiroshi K. <kg...@ko...> - 2002-06-10 15:58:08
|
On <200...@hi...>
wrote by Masao Mutoh <mu...@hi...>:
>> むとうです。
桑形です。
>> やはりそうでしたか。なるほど。
です。
>> こちらですが、ひとまずruby-gnomeには適用しました。
作業がかぶってしまいしたが、こちらでも実用レベルにまで
持っていくために以下の追加を行ないました。
変更点は以下の通りです。
Gdk::Window#property_change
typeでGdk::SELECTION_TYPE_ATOMが指定された場合の動作。
戻り値としてselfを返すように。
typeでCOMPOUND_TEXTが指定された時にgdk_string_to_compound_text
でエンコードを行なうように変更
Gdk::Window#propery_get
追加
Gdk::Window#propery_delete
追加
rbgdkatom.c
Gdk::Atomと整数値の比較をサポート
(Gdk::SELECTION_TYPE_*がFixnumなので)
rbgdkselection.c
Gdk::Selection::send_notifyのproperty指定でNILを
受け付けるように(GDK_NONEに変換)
上記で一応、TARGETSまわりも対応できるようになります。
パッチは例のごとくこのメールの末尾に張り付けておきます。
#今回はcvs diff -cで吐かせてますので
なおサンプルは以下のようになります。
--- ここから [sample]
#! /usr/local/bin/ruby
# vi:ts=4:sw=4
require 'gtk'
require 'kconv'
w = Gtk::Window::new
w.set_events( Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|
Gdk::POINTER_MOTION_MASK|Gdk::LEAVE_NOTIFY_MASK)
w.signal_connect( 'button_press_event'){ |window,event|
p event.get_time
p w.selection_owner_set( Gdk::Selection::PRIMARY, event.get_time)
}
list = [ Gdk::Atom::intern( 'TARGETS'),
Gdk::Atom::intern( 'COMPOUND_TEXT'),
Gdk::Atom::intern( 'TEXT'),
Gdk::SELECTION_TYPE_STRING,
Gdk::SELECTION_TYPE_WINDOW,
Gdk::SELECTION_TYPE_INTEGER]
w.signal_connect( 'selection_request_event'){ |wi, ev|
tw = Gdk::Window::foreign_new( ev.requestor)
t = ev.target
p t.name
case ev.target
when Gdk::Atom::intern( 'TARGETS')
t = Gdk::SELECTION_TYPE_ATOM
d = list
when Gdk::Atom::intern( 'COMPOUND_TEXT'), Gdk::SELECTION_TYPE_STRING
t = Gdk::Atom::intern( 'COMPOUND_TEXT')
d = "こんばんは"
# when Gdk::SELECTION_TYPE_STRING
# d = "こんばんは"
when Gdk::SELECTION_TYPE_WINDOW
d = 0
when Gdk::SELECTION_TYPE_INTEGER
d = 3
else
d = nil
Gdk::Selection::send_notify(
ev.requestor, ev.selection, ev.target, nil, ev.get_time)
break;
end
tw.property_change( ev.property, t, Gdk::PROP_MODE_REPLACE, d);
Gdk::Selection::send_notify(
ev.requestor, ev.selection, ev.target, ev.property, ev.get_time)
}
w.show_all
Gtk::main
--- ここまで [sample]
>> が、ruby-gnome2ではGdkPixmapPrivateが無いと怒られますんでひとまず
>> そのままにしてあります。
見逃してて返答が送れてしますが、昨日書いた課題のあたりが解決
できるまではruby-gnome2には持っていかないほうがいいかも知れ
ないです。
ζ
---- ^^y-
くわがた@自宅
kg...@ko... − 年年歳歳花相似 歳歳年年人不同 −
--- ここから [patch]
Index: gtk/src/rbgdkatom.c
===================================================================
RCS file: /cvsroot/ruby-gnome/ruby-gnome/gtk/src/rbgdkatom.c,v
retrieving revision 1.1
diff -c -r1.1 rbgdkatom.c
*** gtk/src/rbgdkatom.c 2 Mar 2002 20:13:58 -0000 1.1
--- gtk/src/rbgdkatom.c 10 Jun 2002 15:55:09 -0000
***************
*** 41,47 ****
gdkatom_eq(self, other)
VALUE self, other;
{
! return (get_gdkatom(self) == get_gdkatom(other)) ? Qtrue : Qfalse;
}
void
--- 41,53 ----
gdkatom_eq(self, other)
VALUE self, other;
{
! switch( TYPE( other)){
! case T_FIXNUM:
! return (get_gdkatom(self) == NUM2INT(other)) ? Qtrue : Qfalse;
!
! default:
! return (get_gdkatom(self) == get_gdkatom(other)) ? Qtrue : Qfalse;
! }
}
void
Index: gtk/src/rbgdkconst.c
===================================================================
RCS file: /cvsroot/ruby-gnome/ruby-gnome/gtk/src/rbgdkconst.c,v
retrieving revision 1.6
diff -c -r1.6 rbgdkconst.c
*** gtk/src/rbgdkconst.c 9 Jun 2002 14:28:13 -0000 1.6
--- gtk/src/rbgdkconst.c 10 Jun 2002 15:55:09 -0000
***************
*** 334,346 ****
rb_define_const(mGdk, "RGB_DITHER_MAX", INT2FIX(GDK_RGB_DITHER_MAX));
/* GdkSelectionType */
! rb_define_const(mGdk, "SELECTION_TYPE_ATOM", INT2FIX(GDK_SELECTION_TYPE_ATOM));
! rb_define_const(mGdk, "SELECTION_TYPE_BITMAP", INT2FIX(GDK_SELECTION_TYPE_BITMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_COLORMAP", INT2FIX(GDK_SELECTION_TYPE_COLORMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_DRAWABLE", INT2FIX(GDK_SELECTION_TYPE_DRAWABLE));
! rb_define_const(mGdk, "SELECTION_TYPE_INTEGER", INT2FIX(GDK_SELECTION_TYPE_INTEGER));
! rb_define_const(mGdk, "SELECTION_TYPE_PIXMAP", INT2FIX(GDK_SELECTION_TYPE_PIXMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_WINDOW", INT2FIX(GDK_SELECTION_TYPE_WINDOW));
! rb_define_const(mGdk, "SELECTION_TYPE_STRING", INT2FIX(GDK_SELECTION_TYPE_STRING));
}
--- 334,354 ----
rb_define_const(mGdk, "RGB_DITHER_MAX", INT2FIX(GDK_RGB_DITHER_MAX));
/* GdkSelectionType */
! rb_define_const(mGdk, "SELECTION_TYPE_ATOM",
! INT2FIX(GDK_SELECTION_TYPE_ATOM));
! rb_define_const(mGdk, "SELECTION_TYPE_BITMAP",
! INT2FIX(GDK_SELECTION_TYPE_BITMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_COLORMAP",
! INT2FIX(GDK_SELECTION_TYPE_COLORMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_DRAWABLE",
! INT2FIX(GDK_SELECTION_TYPE_DRAWABLE));
! rb_define_const(mGdk, "SELECTION_TYPE_INTEGER",
! INT2FIX(GDK_SELECTION_TYPE_INTEGER));
! rb_define_const(mGdk, "SELECTION_TYPE_PIXMAP",
! INT2FIX(GDK_SELECTION_TYPE_PIXMAP));
! rb_define_const(mGdk, "SELECTION_TYPE_WINDOW",
! INT2FIX(GDK_SELECTION_TYPE_WINDOW));
! rb_define_const(mGdk, "SELECTION_TYPE_STRING",
! INT2FIX(GDK_SELECTION_TYPE_STRING));
}
Index: gtk/src/rbgdkselection.c
===================================================================
RCS file: /cvsroot/ruby-gnome/ruby-gnome/gtk/src/rbgdkselection.c,v
retrieving revision 1.1
diff -c -r1.1 rbgdkselection.c
*** gtk/src/rbgdkselection.c 2 Mar 2002 20:13:58 -0000 1.1
--- gtk/src/rbgdkselection.c 10 Jun 2002 15:55:09 -0000
***************
*** 58,66 ****
gdkselection_send_notify(self, requestor, selection, target, property, time)
VALUE self, requestor, selection, target, property, time;
{
! gdk_selection_send_notify(NUM2INT(requestor), get_gdkatom(selection),
! get_gdkatom(target), get_gdkatom(property),
! NUM2INT(time));
return Qnil;
}
--- 58,70 ----
gdkselection_send_notify(self, requestor, selection, target, property, time)
VALUE self, requestor, selection, target, property, time;
{
! if( property == Qnil){
! gdk_selection_send_notify(NUM2INT(requestor), get_gdkatom(selection),
! get_gdkatom(target), GDK_NONE, NUM2INT(time));
! } else {
! gdk_selection_send_notify(NUM2INT(requestor), get_gdkatom(selection),
! get_gdkatom(target), get_gdkatom(property), NUM2INT(time));
! }
return Qnil;
}
Index: gtk/src/rbgdkwindow.c
===================================================================
RCS file: /cvsroot/ruby-gnome/ruby-gnome/gtk/src/rbgdkwindow.c,v
retrieving revision 1.5
diff -c -r1.5 rbgdkwindow.c
*** gtk/src/rbgdkwindow.c 9 Jun 2002 14:28:13 -0000 1.5
--- gtk/src/rbgdkwindow.c 10 Jun 2002 15:55:09 -0000
***************
*** 302,367 ****
{
GdkWindow* w;
int f, l;
! GdkAtom p, t;
! void* d;
! w = get_gdkwindow(self);
!
! p = get_gdkatom(property);
! t = get_gdkatom(type);
if(t == GDK_SELECTION_TYPE_ATOM){
! static Atom x;
! x = get_gdkatom(src);
! d = &x;
f = 32;
! l = 1;
} else if(t == GDK_SELECTION_TYPE_BITMAP){
! static Pixmap x;
! x = ((GdkPixmapPrivate*)get_gdkbitmap(src))->xwindow;
! d = (void*)&x;
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_COLORMAP){
! static Colormap x;
! x = ((GdkColormapPrivate*)get_gdkcolormap(src))->xcolormap;
! d = (void*)&x;
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_INTEGER){
! static int x;
! x = NUM2INT(src);
! d = (void*)&x;
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_PIXMAP){
! static Pixmap x;
! x = ((GdkPixmapPrivate*)get_gdkpixmap(src))->xwindow;
! d = (void*)&x;
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_WINDOW||t == GDK_SELECTION_TYPE_DRAWABLE){
! static Window x;
! x = ((GdkPixmapPrivate*)get_gdkwindow(src))->xwindow;
! d = (void*)&x;
f = 32;
l = 1;
! } else if(t == GDK_SELECTION_TYPE_STRING || t == gdk_atom_intern("COMPOUND_TEXT", FALSE)){
! d = (void*)RSTRING(src)->ptr;
f = 8;
! l = RSTRING(src)->len;
} else {
rb_raise(rb_eArgError, "no supperted type.");
}
gdk_property_change(w, p, t, f, NUM2INT(mode), d, l);
}
VALUE gdkWindowAttr;
--- 302,452 ----
{
GdkWindow* w;
int f, l;
! GdkAtom p, t;
! void* d;
! int integer;
! GdkAtom compound_text = gdk_atom_intern("COMPOUND_TEXT", FALSE);
! GdkAtom ot;
!
! w = get_gdkwindow(self);
! p = get_gdkatom(property);
! t = get_gdkatom(type);
! ot = t;
if(t == GDK_SELECTION_TYPE_ATOM){
! int len = RARRAY( src)->len;
!
! d = (Atom*)xmalloc( sizeof( Atom) * len);
!
! for( integer = 0; integer < len; integer++){
! ((Atom*)d)[ integer] = get_gdkatom( rb_ary_entry( src, integer));
! }
f = 32;
! l = len;
} else if(t == GDK_SELECTION_TYPE_BITMAP){
! d = (void*)&(((GdkPixmapPrivate*)get_gdkbitmap(src))->xwindow);
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_COLORMAP){
! d = (void*)&(((GdkColormapPrivate*)get_gdkcolormap(src))->xcolormap);
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_INTEGER){
! integer = NUM2INT(src);
! d = (void*)&integer;
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_PIXMAP){
! d = (void*)&(((GdkPixmapPrivate*)get_gdkpixmap(src))->xwindow);
f = 32;
l = 1;
} else if(t == GDK_SELECTION_TYPE_WINDOW||t == GDK_SELECTION_TYPE_DRAWABLE){
! d = (void*)&(((GdkPixmapPrivate*)get_gdkwindow(src))->xwindow);
f = 32;
l = 1;
! } else if( t == GDK_SELECTION_TYPE_STRING) {
! d = RSTRING( src)->ptr;
f = 8;
! l = RSTRING( src)->len;
!
! } else if( t == gdk_atom_intern( "COMPOUND_TEXT", FALSE)){
! gdk_string_to_compound_text( RSTRING(src)->ptr, &t, &f, (guchar**)&d, &l);
} else {
rb_raise(rb_eArgError, "no supperted type.");
}
gdk_property_change(w, p, t, f, NUM2INT(mode), d, l);
+
+ if( ot == GDK_SELECTION_TYPE_ATOM) {
+ free( d);
+ } else if( ot == gdk_atom_intern( "COMPOUND_TEXT", FALSE)) {
+ gdk_free_compound_text(d);
+ }
+
+ return self;
+ }
+
+ static VALUE
+ gdkwin_prop_get(self, property, type, offset, length, delete)
+ VALUE self, property, type, offset, length, delete;
+ {
+ /* for argument processing */
+ GdkWindow* w;
+ GdkAtom p, t;
+ gulong o, l;
+ gint d;
+ GdkAtom rt;
+ gint rf, rl;
+ void* rd;
+
+ /* for inner processing */
+ int i;
+ VALUE ret;
+
+ w = get_gdkwindow( self);
+ p = get_gdkatom( property);
+ t = get_gdkatom( type);
+ o = NUM2INT( offset);
+ l = NUM2INT( length);
+ d = RTEST( delete);
+
+ if(gdk_property_get( w, p, t, o, l, d, &rt, &rf, &rl,(guchar**)&rd) == FALSE){
+ return Qnil;
+ }
+
+ switch( rf){
+ case 8:
+ default:
+ ret = rb_str_new( rd, rl);
+ break;
+
+ case 16:
+ ret = rb_ary_new();
+
+ for( i = 0; i < rl; i++){
+ rb_ary_push( ret, rb_Integer( ((unsigned short*)rd)[ i]));
+ }
+ break;
+
+ case 32:
+ ret = rb_ary_new();
+
+ if( rt != GDK_SELECTION_TYPE_ATOM){
+ for( i = 0; i < rl; i++){
+ rb_ary_push( ret, rb_Integer( ((unsigned long *)rd)[ i]));
+ }
+ } else {
+ for( i = 0; i < rl; i++){
+ rb_ary_push( ret, make_gdkatom( ((unsigned long *)rd)[ i]));
+ }
+ }
+ break;
+ }
+
+ return rb_ary_new3( 3, make_gdkatom( rt), ret, rb_Integer( rl));
+ }
+
+ static VALUE
+ gdkwin_prop_delete(self, property)
+ VALUE self, property;
+ {
+ GdkWindow* w;
+ GdkAtom p;
+
+ w = get_gdkwindow(self);
+ p = get_gdkatom(property);
+
+ gdk_property_delete( w, p);
+
+ return self;
}
VALUE gdkWindowAttr;
--- ここまで [patch]
|
|
From: Masao M. <mu...@hi...> - 2002-06-10 15:34:27
|
むとうです。 On Mon, 10 Jun 2002 00:42:38 +0900 Hiroshi Kuwagata <kg...@ko...> wrote: > On <200...@hi...> > wrote by Masao Mutoh <mu...@hi...>: > > >> となった場合に、Thread1の08行目以降のxの中身がatom1のままであれば > >> 良いのですが、atom2になってしまったらまずいのではないかなぁと思っ > >> たんです。 > そのタイミングは危険ですね。通常はクリティカルになるように > 作るのでそっちのタイミングは失念してました。 > > Cでstaticローカル(スーパーローカルも一緒)な場合、唯一固定の > 領域になりますので(静的な記憶クラスが与えられます)。 やはりそうでしたか。なるほど。 > >> > もっともWindowsの方は私は知りませんし、気になるなら > >> > > >> > static Pixmap x; > >> > x = ((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow; > >> > d = (void*)&x; > >> > f = 32; > >> > l = 1; > >> > > >> > となっているのを > >> > > >> > d = (void*)&(((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow); > >> > f = 32; > >> > l = 1; > >> > > >> > としてしまえば問題ないとは思います。 > >> こちらですが、ひとまずruby-gnomeには適用しました。 が、ruby-gnome2ではGdkPixmapPrivateが無いと怒られますんでひとまず そのままにしてあります。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Hiroshi K. <kg...@ko...> - 2002-06-09 15:42:44
|
On <200...@hi...>
wrote by Masao Mutoh <mu...@hi...>:
>> むとうです。
桑形です。
>> いや、そのタイミングではなく、純粋にgdkwin_prop_change()内での話で、
>> Threadで2回連続で呼び出されるタイミングの話です。
>> となった場合に、Thread1の08行目以降のxの中身がatom1のままであれば
>> 良いのですが、atom2になってしまったらまずいのではないかなぁと思っ
>> たんです。
>>
>> いや、こういうstaticな変数って正直使ったこと無いので、スコープが
>> どうなってるのかが理解できていないのが問題なのかもしれませんが。
>> #不勉強で申し訳ないです。
そのタイミングは危険ですね。通常はクリティカルになるように
作るのでそっちのタイミングは失念してました。
Cでstaticローカル(スーパーローカルも一緒)な場合、唯一固定の
領域になりますので(静的な記憶クラスが与えられます)。
>> > もっともWindowsの方は私は知りませんし、気になるなら
>> >
>> > static Pixmap x;
>> > x = ((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow;
>> > d = (void*)&x;
>> > f = 32;
>> > l = 1;
>> >
>> > となっているのを
>> >
>> > d = (void*)&(((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow);
>> > f = 32;
>> > l = 1;
>> >
>> > としてしまえば問題ないとは思います。
>>
>> こちらであればstaticの振る舞いとは別に問題ないのはわかるんですけどね〜。
こっちからはCVSのアクセス権は無いので上記のように修正
して頂ければ幸いです。
ζ
---- ^^y-
くわがた@自宅
kg...@ko... − 年年歳歳花相似 歳歳年年人不同 −
|
|
From: Masao M. <mu...@hi...> - 2002-06-09 15:41:52
|
むとうです。 On Mon, 10 Jun 2002 00:26:38 +0900 Masao Mutoh <mu...@hi...> wrote: > ruby 1.7の最新版を取得して試してみたらいがらしさんと > 同様なMakefileを生成してしまいました(intall行が2行ある)。 っていうか、mkmf.rbがもろそうなってますね。 1.6系と違うのですが、これはこれで良いんでしょうか? Makefileの記述方法ってあまり詳しくないので判断できないんですが。 うーむ。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Masao M. <mu...@hi...> - 2002-06-09 15:26:46
|
むとうです。 On Wed, 05 Jun 2002 01:51:03 +0900 Hiroshi IGARASHI <ig...@ru...> wrote: > いがらしです。 > > 今のCVS版ではどうでしょうか。 > > ruby 1.6ではOKになりましたが、ruby 1.7ではやはり > gnome/src/Makefileにこんなターゲットができて、 > 前者しか実行されないようです。 > トップディレクトリ,gnomeディレクトリのどちらでextconf.rbを > 実行してもこうなります。 > ruby 1.7の最新版を取得して試してみたらいがらしさんと 同様なMakefileを生成してしまいました(intall行が2行ある)。 ただ、インストールはそのまま問題なくできました。 (どちらのディレクトリでも) $ ruby --version ruby 1.7.2 (2002-06-04) [i686-linux] インストールもできないでしょうか? > いがらしさん どなたか追試お願いできませんか。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Masao M. <mu...@hi...> - 2002-06-09 15:18:51
|
むとうです。
いやぁ、日本勝ちましたね。テレビに釘付けでした(^^)/。
On Sun, 09 Jun 2002 23:54:48 +0900
Hiroshi Kuwagata <kg...@ko...> wrote:
> On <200...@hi...>
> wrote by Masao Mutoh <mu...@hi...>:
> >> むとうです。
>
> 桑形です。
>
> >> gdkwin_prop_change()で、if文毎にstatic変数がありますが、これは
> >> staticで大丈夫でしょうか。
> >> Threadを利用したプログラムで、gdkwin_prop_change()を2度連続で
> >> (同じtypeで)呼び出した時に、1度目に取得した情報が2度目に取得した
> >> 情報で上書きされてしまわないでしょうか。
> >> #C言語苦手なもんで純粋に質問ベースなのですが...(^^;)。
> >>
> >> P.S.
> >> Ruby-GNOME2の方へも反映させときました。
>
> 一応、XChangeProperty(gdk_property_changeで呼び出さ
> れるXlibの関数)では、この関数内でデータのコピーを
> 行なうので(Displayにコピーしてるので即座にサーバに
> 転送してると思って良いと思います)特に問題はないです。
いや、そのタイミングではなく、純粋にgdkwin_prop_change()内での話で、
Threadで2回連続で呼び出されるタイミングの話です。
抜粋しますと、
01 static VALUE
02 gdkwin_prop_change( self, property, type, mode, src)
03 VALUE self, property, type, mode, src;
04 if( t == GDK_SELECTION_TYPE_ATOM){
05 static Atom x;
06 x = get_gdkatom( src);
07 d = &x;
08 } else {
09 }
10
11 gdk_property_change( w, p, t, f, NUM2INT( mode), d, l);
12 }
上記の場合で、
Thread1 Thread2
06 x = atom1
07 x = atom1 06 x = atom2
08 x = ? 07 x = atom2
09 x = ? 08 x = atom2
10 x = ? 09 x = atom2
11 x = ? 10 x = atom2
12 x = ? 11 x = atom2
となった場合に、Thread1の08行目以降のxの中身がatom1のままであれば
良いのですが、atom2になってしまったらまずいのではないかなぁと思っ
たんです。
いや、こういうstaticな変数って正直使ったこと無いので、スコープが
どうなってるのかが理解できていないのが問題なのかもしれませんが。
#不勉強で申し訳ないです。
> もっともWindowsの方は私は知りませんし、気になるなら
>
> static Pixmap x;
> x = ((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow;
> d = (void*)&x;
> f = 32;
> l = 1;
>
> となっているのを
>
> d = (void*)&(((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow);
> f = 32;
> l = 1;
>
> としてしまえば問題ないとは思います。
こちらであればstaticの振る舞いとは別に問題ないのはわかるんですけどね〜。
--
.:% Masao Mutoh<mu...@hi...>
|
|
From: Hiroshi K. <kg...@ko...> - 2002-06-09 14:54:55
|
On <200...@hi...>
wrote by Masao Mutoh <mu...@hi...>:
>> むとうです。
桑形です。
>> gdkwin_prop_change()で、if文毎にstatic変数がありますが、これは
>> staticで大丈夫でしょうか。
>> Threadを利用したプログラムで、gdkwin_prop_change()を2度連続で
>> (同じtypeで)呼び出した時に、1度目に取得した情報が2度目に取得した
>> 情報で上書きされてしまわないでしょうか。
>> #C言語苦手なもんで純粋に質問ベースなのですが...(^^;)。
>>
>> P.S.
>> Ruby-GNOME2の方へも反映させときました。
一応、XChangeProperty(gdk_property_changeで呼び出さ
れるXlibの関数)では、この関数内でデータのコピーを
行なうので(Displayにコピーしてるので即座にサーバに
転送してると思って良いと思います)特に問題はないです。
もっともWindowsの方は私は知りませんし、気になるなら
static Pixmap x;
x = ((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow;
d = (void*)&x;
f = 32;
l = 1;
となっているのを
d = (void*)&(((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow);
f = 32;
l = 1;
としてしまえば問題ないとは思います。
#GCとの絡みはRubyが保守的なガベコレを行なってくれてるので
#問題ないはず
ζ
---- ^^y-
くわがた@自宅
kg...@ko... − 年年歳歳花相似 歳歳年年人不同 −
|
|
From: Masao M. <mu...@hi...> - 2002-06-09 14:37:37
|
むとうです。 On Sun, 9 Jun 2002 23:31:12 +0900 Masao Mutoh <mu...@hi...> wrote: > むとうです。 > 若干修正してCVSへコミットしました。 > > ・rbgdkatom.cのVALUE gdkProperty;を削除 > ・メソッド呼び出し時の引数の記述方法を修正 > → hoge( a) を hoge(a)にしました。 1コ忘れてました。 type_ctextを削除して、gdk_property_change()内で 直接gdk_atom_internを呼ぶようにしました。 何か問題があったら言ってくださいね。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Masao M. <mu...@hi...> - 2002-06-09 14:34:59
|
むとうです。
On Sun, 09 Jun 2002 04:12:58 +0900
WATANABE Hirofumi <eb...@os...> wrote:
> わたなべです。
>
> Masao Mutoh <mu...@hi...> writes:
>
> :> 元に戻すか、この方向で進めるのなら
> :> $libs += ' ' + `#{config_cmd} --libs`.chomp
> :> としたほうがいいでしょう。
> :
> :遅くなりましたが、Ruby/GTKだけじゃなくて一通り
> :上記のように修正しちゃいました。確認していただけると助かります。
>
> Ruby/GTKをCygwinで試しました。okです。
追試どうもです。
> :ところで、pkg-config gnome --libs/--cflags の結果って信用できるモノ
> :なのでしょうか。
> :信用できるのならhave_library使わなくても良さそうな気がしますし、
> :信用できないなら、pkg-configの結果からライブラリを抜き出して
> :have_libraryしないといけないような。
>
> 確かに冗長のようです。 *-configを使ってないころの名残りのような気がしますね。
やっぱしそうなんですかね。なくしちゃおうかな。
> :それから、have_func使っているところがあるのですが、
> :これって全部必要なモノなんでしょうか。
> :Win32な環境向けなのでしょうか。
>
> gdk_ic_attr_new()はversionの違いかもしれません(今使ってる
> 古いGTK+ for Windowsにはない)。これも名残りかなあ。
> XReadBitmapFileDataは直接使っているので必要でしょう。
なるほど。こちらはいじらない方が良いかな〜。
--
.:% Masao Mutoh<mu...@hi...>
|
|
From: Masao M. <mu...@hi...> - 2002-06-09 14:31:17
|
むとうです。 On 9 Jun 2002 13:02:21 -0000 Hiroshi Kuwagata <kg...@ko...> wrote: > 桑形です。 > > 付箋/Rubyで必要になったのでセレクションを使用するための > メソッドを追加しましたので、そのパッチを送付します。 ありがとうございます。 若干修正してCVSへコミットしました。 ・rbgdkatom.cのVALUE gdkProperty;を削除 ・メソッド呼び出し時の引数の記述方法を修正 → hoge( a) を hoge(a)にしました。 ところで質問です。 gdkwin_prop_change()で、if文毎にstatic変数がありますが、これは staticで大丈夫でしょうか。 Threadを利用したプログラムで、gdkwin_prop_change()を2度連続で (同じtypeで)呼び出した時に、1度目に取得した情報が2度目に取得した 情報で上書きされてしまわないでしょうか。 #C言語苦手なもんで純粋に質問ベースなのですが...(^^;)。 P.S. Ruby-GNOME2の方へも反映させときました。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Hiroshi K. <kg...@ko...> - 2002-06-09 13:02:29
|
桑形です。 付箋/Rubyで必要になったのでセレクションを使用するための メソッドを追加しましたので、そのパッチを送付します。 追加/変更点は以下の通りです。 ・Gdk::EventSelctionのメンバのクラス変更 property,target,selectionを現行IntegerなのをGdk::Atomに ・メソッドの追加 Gdk::Window#property_change ・定数の追加 Gdk::SELECTION_TYPE_ATOM Gdk::SELECTION_TYPE_BITMAP Gdk::SELECTION_TYPE_COLORMAP Gdk::SELECTION_TYPE_DRAWABLE Gdk::SELECTION_TYPE_INTEGER Gdk::SELECTION_TYPE_PIXMAP Gdk::SELECTION_TYPE_STRING Gdk::SELECTION_TYPE_WINDOW ※GdkSelectionTypeに相当 #gdk_property_change()に相当 Gdk::Window#property_changeのI/Fは以下の通りになっています。 Gdk::Window#property_change( property, type, mode, data) property : 変更するプロパティ type : 変更するプロパティのタイプ mode : プロパティの変更方法 Gdk::PROP_MODE_APPEND, Gdk::PROP_MODE_PREPEND, Gdk::PROP_MODE_REPLACEのいずれかを指定。 data : プロパティに設定するデータ gdk_property_change()には、上記の引数の他にformatとnelements がありますが ・(建前上)GdkSelectionTypeで定義されるプロパティのみ が指定可能な模様。 ・Ruby/GTK(もしくはRuby)のオブジェクトのラッピングを 剥ぎ取る処理を内部処理に含めた の理由により内部で算出させるようにしています。 現行ではテストの為にGdkSelectionTypeで定義されていない物があ る場合 rb_raise()で例外を発生させておりますので、実際に使用/採用 されるのなら相当の処理に変更して下さい。 Ruby/GTK 0.28へのパッチを本メールの末尾に添付しておきます。 #なお使用するためのサンプルコードは # http://www.kokone.to/~kgt/diary.shtml?200206#08_6_2 #を参照して下さい。 このパッチはCopy&Pasteの為に作ったのですが、仕様の面で不十分 なのはCopy&Paste以外にこのメソッドを使うのが難しいという所で しょうか。 課題になるのは、あらゆる用途に使用しようと思うとtypeを無制限 に許可しないといけないのですが、Rubyオブジェクトの皮向きを どうRuby上で指定させるかという点です(少なくとも皮むき自体は Ruby上では出来ない…と思われます)。 #gdk_property_change()には実体(Window IDやPixmap ID) #で指定する必要があるため 何か名案があればよろしくお願いします。 ζ ---- ^^y- くわがた@自宅 kg...@ko... − 年年歳歳花相似 歳歳年年人不同 − ---- ここから patch diff -c -r --exclude=CVS ruby-gnome/gtk/src/rbgdkatom.c ruby-gnome.new/gtk/src/rbgdkatom.c *** ruby-gnome/gtk/src/rbgdkatom.c Sun Mar 3 05:13:58 2002 --- ruby-gnome.new/gtk/src/rbgdkatom.c Sun Jun 9 03:03:25 2002 *************** *** 13,18 **** --- 13,19 ---- #include "global.h" VALUE gdkAtom; + VALUE gdkProperty; static VALUE gdkatom_s_intern(argc, argv, self) diff -c -r --exclude=CVS ruby-gnome/gtk/src/rbgdkconst.c ruby-gnome.new/gtk/src/rbgdkconst.c *** ruby-gnome/gtk/src/rbgdkconst.c Tue May 28 23:16:14 2002 --- ruby-gnome.new/gtk/src/rbgdkconst.c Sat Jun 8 01:10:35 2002 *************** *** 332,336 **** --- 332,354 ---- rb_define_const(mGdk, "RGB_DITHER_NONE", INT2FIX(GDK_RGB_DITHER_NONE)); rb_define_const(mGdk, "RGB_DITHER_NORMAL", INT2FIX(GDK_RGB_DITHER_NORMAL)); rb_define_const(mGdk, "RGB_DITHER_MAX", INT2FIX(GDK_RGB_DITHER_MAX)); + + /* GdkSelectionType */ + rb_define_const(mGdk, "SELECTION_TYPE_ATOM", + INT2FIX(GDK_SELECTION_TYPE_ATOM)); + rb_define_const(mGdk, "SELECTION_TYPE_BITMAP", + INT2FIX(GDK_SELECTION_TYPE_BITMAP)); + rb_define_const(mGdk, "SELECTION_TYPE_COLORMAP", + INT2FIX(GDK_SELECTION_TYPE_COLORMAP)); + rb_define_const(mGdk, "SELECTION_TYPE_DRAWABLE", + INT2FIX(GDK_SELECTION_TYPE_DRAWABLE)); + rb_define_const(mGdk, "SELECTION_TYPE_INTEGER", + INT2FIX(GDK_SELECTION_TYPE_INTEGER)); + rb_define_const(mGdk, "SELECTION_TYPE_PIXMAP", + INT2FIX(GDK_SELECTION_TYPE_PIXMAP)); + rb_define_const(mGdk, "SELECTION_TYPE_WINDOW", + INT2FIX(GDK_SELECTION_TYPE_WINDOW)); + rb_define_const(mGdk, "SELECTION_TYPE_STRING", + INT2FIX(GDK_SELECTION_TYPE_STRING)); } Only in ruby-gnome.new/gtk/src: rbgdkdraw.c.orig diff -c -r --exclude=CVS ruby-gnome/gtk/src/rbgdkevent.c ruby-gnome.new/gtk/src/rbgdkevent.c *** ruby-gnome/gtk/src/rbgdkevent.c Fri Feb 15 14:02:24 2002 --- ruby-gnome.new/gtk/src/rbgdkevent.c Tue Jun 4 22:06:28 2002 *************** *** 462,482 **** gdkeventselection_selection(self) VALUE self; { ! return INT2NUM(get_gdkevent(self)->selection.selection); } static VALUE gdkeventselection_target(self) VALUE self; { ! return INT2NUM(get_gdkevent(self)->selection.target); } static VALUE gdkeventselection_property(self) VALUE self; { ! return INT2NUM(get_gdkevent(self)->selection.property); } static VALUE --- 462,482 ---- gdkeventselection_selection(self) VALUE self; { ! return make_gdkatom(get_gdkevent(self)->selection.selection); } static VALUE gdkeventselection_target(self) VALUE self; { ! return make_gdkatom(get_gdkevent(self)->selection.target); } static VALUE gdkeventselection_property(self) VALUE self; { ! return make_gdkatom(get_gdkevent(self)->selection.property); } static VALUE diff -c -r --exclude=CVS ruby-gnome/gtk/src/rbgdkwindow.c ruby-gnome.new/gtk/src/rbgdkwindow.c *** ruby-gnome/gtk/src/rbgdkwindow.c Mon Feb 4 09:18:03 2002 --- ruby-gnome.new/gtk/src/rbgdkwindow.c Sun Jun 9 03:04:13 2002 *************** *** 296,301 **** --- 296,371 ---- return Qnil; } + static GdkAtom type_ctext; + + static VALUE + gdkwin_prop_change( self, property, type, mode, src) + VALUE self, property, type, mode, src; + { + GdkWindow* w; + int f, l; + GdkAtom p, t; + void* d; + + w = get_gdkwindow( self); + + p = get_gdkatom( property); + t = get_gdkatom( type); + + if( t == GDK_SELECTION_TYPE_ATOM){ + static Atom x; + x = get_gdkatom( src); + d = &x; + f = 32; + l = 1; + + } else if( t == GDK_SELECTION_TYPE_BITMAP){ + static Pixmap x; + x = ((GdkPixmapPrivate*)get_gdkbitmap( src))->xwindow; + d = (void*)&x; + f = 32; + l = 1; + + } else if( t == GDK_SELECTION_TYPE_COLORMAP){ + static Colormap x; + x = ((GdkColormapPrivate*)get_gdkcolormap( src))->xcolormap; + d = (void*)&x; + f = 32; + l = 1; + + } else if( t == GDK_SELECTION_TYPE_INTEGER){ + static int x; + x = NUM2INT( src); + d = (void*)&x; + f = 32; + l = 1; + + } else if( t == GDK_SELECTION_TYPE_PIXMAP){ + static Pixmap x; + x = ((GdkPixmapPrivate*)get_gdkpixmap( src))->xwindow; + d = (void*)&x; + f = 32; + l = 1; + + } else if( t == GDK_SELECTION_TYPE_WINDOW||t == GDK_SELECTION_TYPE_DRAWABLE){ + static Window x; + x = ((GdkPixmapPrivate*)get_gdkwindow( src))->xwindow; + d = (void*)&x; + f = 32; + l = 1; + + } else if( t == GDK_SELECTION_TYPE_STRING || t == type_ctext){ + d = (void*)RSTRING( src)->ptr; + f = 8; + l = RSTRING( src)->len; + + } else { + rb_raise(rb_eArgError, "no supperted type."); + } + + gdk_property_change( w, p, t, f, NUM2INT( mode), d, l); + } + VALUE gdkWindowAttr; void *************** *** 338,343 **** --- 408,415 ---- rb_define_method(gdkWindow, "hide", gdkwin_hide, 0); rb_define_method(gdkWindow, "get_geometry", gdkwin_get_geometry, 0); + rb_define_method(gdkWindow, "property_change", gdkwin_prop_change, 4); + /* GdkWindowHints */ rb_define_const(gdkWindow, "HINT_POS", INT2FIX(GDK_HINT_POS)); rb_define_const(gdkWindow, "HINT_MIN_SIZE", INT2FIX(GDK_HINT_MIN_SIZE)); *************** *** 349,354 **** --- 421,429 ---- /* Gdk::WindowAttr */ gdkWindowAttr = rb_define_class_under(mGdk, "WindowAttr", rb_cData); + + /* static GdkAtom value */ + type_ctext = gdk_atom_intern( "COMPOUND_TEXT", FALSE); } /* *************** *** 624,629 **** --- 699,705 ---- geo->max_aspect = NUM2DBL(max_aspect); return self; } + void Init_gtk_gdk_geometry() { ---- patch ここまで |
|
From: WATANABE H. <eb...@os...> - 2002-06-08 19:13:59
|
わたなべです。
Masao Mutoh <mu...@hi...> writes:
:> 元に戻すか、この方向で進めるのなら
:> $libs += ' ' + `#{config_cmd} --libs`.chomp
:> としたほうがいいでしょう。
:
:遅くなりましたが、Ruby/GTKだけじゃなくて一通り
:上記のように修正しちゃいました。確認していただけると助かります。
Ruby/GTKをCygwinで試しました。okです。
:ところで、pkg-config gnome --libs/--cflags の結果って信用できるモノ
:なのでしょうか。
:信用できるのならhave_library使わなくても良さそうな気がしますし、
:信用できないなら、pkg-configの結果からライブラリを抜き出して
:have_libraryしないといけないような。
確かに冗長のようです。 *-configを使ってないころの名残りのような気がしますね。
:それから、have_func使っているところがあるのですが、
:これって全部必要なモノなんでしょうか。
:Win32な環境向けなのでしょうか。
gdk_ic_attr_new()はversionの違いかもしれません(今使ってる
古いGTK+ for Windowsにはない)。これも名残りかなあ。
XReadBitmapFileDataは直接使っているので必要でしょう。
--
わたなべひろふみ
|
|
From: Masao M. <mu...@hi...> - 2002-06-08 16:12:47
|
むとうです。 五十嵐さんのご厚意で、以前のRuby/GTKの公式サイト http://www.ruby-lang.org/gtk/ を削除し、TutorialをSF上のWebsiteに移しました。 今後、Ruby/GTK, Ruby-GNOMEの公式サイトは http://ruby-gnome.sourceforge.net/ になりますので、リンク等をはっている方は変更して くださるようお願いします。 ところで、現在のRuby-GNOMEの公式サイト、 デザインがちょっとイケテナイ(というかテキストのまま なんでイケテルイケテナイ以前ですが)のでもうちょっと おしゃれにできないかなぁと思ってます。 そこで、Websiteをおしゃれにしていただける方を募集します。 我こそはと思う方がいらっしゃいましたら、メールください。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Masao M. <mu...@hi...> - 2002-06-05 16:51:29
|
むとうです。 On Wed, 05 Jun 2002 01:51:03 +0900 Hiroshi IGARASHI <ig...@ru...> wrote: > いがらしです。 > > At Tue, 4 Jun 2002 23:02:47 +0900, > Masao Mutoh <mu...@hi...> wrote: > > > > 追試ありがとうございます。 > > 中途半端な報告しかできずごめんなさい。 > 私はいまいち問題の本質を理解できていないような... いや、私も行き当たりばったりです(^^;)。 > > 今のCVS版ではどうでしょうか。 > > ruby 1.6ではOKになりましたが、ruby 1.7ではやはり > gnome/src/Makefileにこんなターゲットができて、 > 前者しか実行されないようです。 > トップディレクトリ,gnomeディレクトリのどちらでextconf.rbを > 実行してもこうなります。 あれ〜。私の環境だと一応動いたんですよね...。環境依存なのかな。 #だとしたらダメダメですね...。 でも、install:が2つできるって言うのはちょっと変ですね。 私の環境では1つでした。うーむ。 ruby --version ruby 1.7.2 (2002-01-05) [i686-linux] #古い?(^^;)。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Hiroshi I. <ig...@ru...> - 2002-06-04 16:51:13
|
いがらしです。
At Tue, 4 Jun 2002 23:02:47 +0900,
Masao Mutoh <mu...@hi...> wrote:
>
> 追試ありがとうございます。
中途半端な報告しかできずごめんなさい。
私はいまいち問題の本質を理解できていないような...
> 今のCVS版ではどうでしょうか。
ruby 1.6ではOKになりましたが、ruby 1.7ではやはり
gnome/src/Makefileにこんなターゲットができて、
前者しか実行されないようです。
トップディレクトリ,gnomeディレクトリのどちらでextconf.rbを
実行してもこうなります。
install: $(archdir)$(target_prefix)/$(DLLIB)
site-install: $(sitearchdir)$(target_prefix)/$(DLLIB)
$(archdir)$(target_prefix)/$(DLLIB): $(DLLIB)
@$(MAKEDIRS) $(rubylibdir) $(archdir)$(target_prefix)
@$(INSTALL_PROG) $(DLLIB) $(archdir)$(target_prefix)/$(DLLIB)
$(sitearchdir)$(target_prefix)/$(DLLIB): $(DLLIB)
@$(MAKEDIRS) $(sitearchdir)$(target_prefix)
@$(INSTALL_PROG) $(DLLIB) $(sitearchdir)$(target_prefix)/$(DLLIB)
install:
@$(MAKEDIRS) $(rubylibdir)$(target_prefix)
@$(INSTALL_DATA) ../src/lib/gnome.rb $(rubylibdir)$(target_prefix)
site-install:
@$(MAKEDIRS) $(rubylibdir)$(target_prefix)
@$(INSTALL_DATA) ../src/lib/gnome.rb $(rubylibdir)$(target_prefix)
At Tue, 4 Jun 2002 22:59:00 +0900,
Masao Mutoh <mu...@hi...> wrote:
>
> まぁ、Ruby-GNOME2ではディレクトリ階層含め、この辺ももう少しきれいに
> したいと思いますがひとまずこの辺で。
そうですね。安直にgnome/src/lib/gnome.rbを置いた張本人としても^_^;
Ruby-GNOME2ではぜひすっきりさせたいです。
できればあまりRuby-GNOME2で頑張らず、Ruby本体側(mkmf.rbやその後継?)
で吸収するようにお願いしたいところですが。
また、Ruby本体のext以下に置いてstatic linkするっていうのは
今もできるんでしょうかね? まあ需要は少なそうですけれど。
--
五十嵐 宏 (Hiroshi IGARASHI)
|
|
From: Masao M. <mu...@hi...> - 2002-06-04 16:12:26
|
むとうです。
On Sat, 01 Jun 2002 21:27:32 +0900
WATANABE Hirofumi <eb...@os...> wrote:
> わたなべです。
> 0.28から
> $LDFLAGS += ' ' + `#{config_cmd} --libs`.chomp
> となりましたが、これではライブラリがオブジェクトファイルの前
> に来てしまうので順番がまずいです。
> 元に戻すか、この方向で進めるのなら
> $libs += ' ' + `#{config_cmd} --libs`.chomp
> としたほうがいいでしょう。
遅くなりましたが、Ruby/GTKだけじゃなくて一通り
上記のように修正しちゃいました。確認していただけると助かります。
その他、extconf.rb周りをいろいろと見てみました。
若干修正入れてますが、これ、共通的な部分はくくり出すように
しないとつらいですね...。これもRuby-GNOME2でどうにかしましょうか。
ところで、pkg-config gnome --libs/--cflags の結果って信用できるモノ
なのでしょうか。
信用できるのならhave_library使わなくても良さそうな気がしますし、
信用できないなら、pkg-configの結果からライブラリを抜き出して
have_libraryしないといけないような。
それから、have_func使っているところがあるのですが、
これって全部必要なモノなんでしょうか。
Win32な環境向けなのでしょうか。
もし知っている方がいらしたら教えてください。
それでは。
--
.:% Masao Mutoh<mu...@hi...>
|
|
From: Masao M. <mu...@hi...> - 2002-06-04 14:02:51
|
むとうです。 On Tue, 04 Jun 2002 01:27:27 +0900 Hiroshi IGARASHI <ig...@ru...> wrote: > いがらしです。 > まだ調べかけですが... 追試ありがとうございます。 今のCVS版ではどうでしょうか。 -- .:% Masao Mutoh<mu...@hi...> |
|
From: Masao M. <mu...@hi...> - 2002-06-04 13:59:05
|
むとうです。 On Tue, 4 Jun 2002 00:59:23 +0900 Masao Mutoh <mu...@hi...> wrote: > On Mon, 03 Jun 2002 22:11:06 +0900 > akira yamada <ak...@ar...> wrote: > > > > > >>>>> In <200...@hi...> > > >>>>> Masao Mutoh <mu...@hi...> wrote: > > > Ruby-GNOME-0.28をリリースしました。 > > > > 勘違いだったら申しわけないんですが > > ruby-gnome-all-0.28においてruby extconf.rbした時に限って > > gnome.rbがインストールされないということはないですか? > > > > gnome部分についてだけ一階層深いので > > srcdirあたりがずれてしまっているのではないかと思うのですが…。 > > # cd gnome; ruby extconf.rbした場合、gnome.rbがインストールされます。 extconf.rb周りをなかださんにお願いしてたんですが、 今、coreとかでお忙しいみたいなんで、私の方で(相当バータリーですが) 対応してみました。 よろしければ確認していただけないでしょうか。 #なかださんがアップデートしたらもうちょっときれいになるに違いない(^^;)。 まぁ、Ruby-GNOME2ではディレクトリ階層含め、この辺ももう少しきれいに したいと思いますがひとまずこの辺で。 -- .:% Masao Mutoh<mu...@hi...> |