~ted/ubuntu/lucid/tomboy/with-patch

« back to all changes in this revision

Viewing changes to Tomboy/NoteBuffer.cs

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2006-11-16 21:24:14 UTC
  • mfrom: (1.1.7 upstream) (3 etch)
  • mto: This revision was merged to the branch mainline in revision 4.
  • Revision ID: james.westby@ubuntu.com-20061116212414-i9mqu3nnn90ulo7m
Tags: 0.5.0-0ubuntu1
* New upstream release
* debian/patches/52_applet-crash.patch:
  + Dropped, merged upstream
* debian/control,
  debian/patches/52_external-dbus-sharp.patch:
  + Build depend on libdbus-1-cil and build against it instead of the
    bundled version
* debian/rules:
  + Install DBus service file into the correct directory
* debian/patches/53_tomboy-tray-icon.patch:
  + Correctly set the icon for the trayicon

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
        {
15
15
                UndoManager undo_manager;
16
16
 
 
17
                // GODDAMN Gtk.TextBuffer. I hate you. Hate Hate Hate.
 
18
                struct ImageInsertData
 
19
                {
 
20
                        public bool adding;
 
21
                        public Gtk.TextBuffer buffer;
 
22
                        public Gtk.TextMark position;
 
23
                        public Gdk.Pixbuf image;
 
24
                        public NoteTag tag;
 
25
                };
 
26
                ArrayList imageQueue;
 
27
                uint imageQueueTimeout;
 
28
                // HATE.
 
29
 
17
30
                // list of Gtk.TextTags to apply on insert
18
31
                ArrayList active_tags;
19
32
 
27
40
                        MarkSet += MarkSetEvent;
28
41
 
29
42
                        tags.TagChanged += OnTagChanged;
 
43
 
 
44
                        imageQueue = new ArrayList();
 
45
                        imageQueueTimeout = 0;
30
46
                }
31
47
 
32
48
                // Signal that text has been inserted, and any active tags have
149
165
 
150
166
                void ImageSwap (NoteTag tag, 
151
167
                                Gtk.TextIter start, 
152
 
                                Gtk.TextIter end) 
153
 
                {
154
 
                        if (tag.Image != null &&
155
 
                            tag.Image != start.Pixbuf) {
156
 
                                Logger.Log ("ImageSwap: tag='{0}' {1}:'{3}'-{2}:'{4}'", 
157
 
                                            tag.ElementName,
158
 
                                            start.Offset,
159
 
                                            end.Offset,
160
 
                                            start.Char,
161
 
                                            end.Char);
162
 
 
163
 
                                start.Buffer.InsertPixbuf (ref start, tag.Image);
164
 
                        }
 
168
                                Gtk.TextIter end,
 
169
                                bool adding) 
 
170
                {
 
171
                        if (tag.Image == null)
 
172
                                return;
 
173
 
 
174
                        Gtk.TextIter prev = start;
 
175
                        prev.BackwardChar();
 
176
 
 
177
                        if ((adding == true  && tag.Image != prev.Pixbuf) ||
 
178
                            (adding == false && tag.Image == prev.Pixbuf)) {
 
179
                                ImageInsertData data = new ImageInsertData();
 
180
                                data.buffer = start.Buffer;
 
181
                                data.tag = tag;
 
182
                                data.image = tag.Image;
 
183
                                data.adding = adding;
 
184
 
 
185
                                if (adding) {
 
186
                                        data.position = start.Buffer.CreateMark (null, start, true);
 
187
                                } else {
 
188
                                        data.position = tag.ImageLocation;
 
189
                                }
 
190
 
 
191
                                imageQueue.Add(data);
 
192
 
 
193
                                if (imageQueueTimeout == 0) {
 
194
                                        imageQueueTimeout = GLib.Idle.Add(RunImageQueue);
 
195
                                }
 
196
                        }
 
197
                }
 
198
 
 
199
                public bool RunImageQueue ()
 
200
                {
 
201
                        foreach (ImageInsertData data in imageQueue) {
 
202
                                NoteBuffer buffer = data.buffer as NoteBuffer;
 
203
                                Gtk.TextIter iter = buffer.GetIterAtMark (data.position);
 
204
 
 
205
                                buffer.Undoer.FreezeUndo();
 
206
 
 
207
                                if (data.adding && data.tag.ImageLocation == null) {
 
208
                                        buffer.InsertPixbuf (ref iter, data.image);
 
209
                                        data.tag.ImageLocation = data.position;
 
210
                                } else if (!data.adding && data.tag.ImageLocation != null) {
 
211
                                        Gtk.TextIter end = iter;
 
212
                                        end.ForwardChar();
 
213
                                        buffer.Delete (ref iter, ref end);
 
214
                                        buffer.DeleteMark (data.position);
 
215
                                        data.tag.ImageLocation = null;
 
216
                                }
 
217
 
 
218
                                buffer.Undoer.ThawUndo();
 
219
                        }
 
220
 
 
221
                        imageQueue.Clear();
 
222
 
 
223
                        imageQueueTimeout = 0;
 
224
                        return false;
165
225
                }
166
226
 
167
227
                void OnTagChanged (object sender, Gtk.TagChangedArgs args)
171
231
                                TextTagEnumerator enumerator = 
172
232
                                        new TextTagEnumerator (this, note_tag);
173
233
                                foreach (TextRange range in enumerator) {
174
 
                                        ImageSwap (note_tag, range.Start, range.End);
 
234
                                        ImageSwap (note_tag, range.Start, range.End, true);
175
235
                                }
176
236
                        }
177
237
                }
184
244
 
185
245
                        NoteTag note_tag = tag as NoteTag;
186
246
                        if (note_tag != null) {
187
 
                                ImageSwap (note_tag, start, end);
188
 
                        }
 
247
                                ImageSwap (note_tag, start, end, true);
 
248
                        }
 
249
                }
 
250
 
 
251
                protected override void OnTagRemoved (Gtk.TextTag tag,
 
252
                                                      Gtk.TextIter start,
 
253
                                                      Gtk.TextIter end)
 
254
                {
 
255
                        NoteTag note_tag = tag as NoteTag;
 
256
                        if (note_tag != null) {
 
257
                                ImageSwap (note_tag, start, end, false);
 
258
                        }
 
259
 
 
260
                        base.OnTagRemoved (tag, start, end);
189
261
                }
190
262
 
191
263
                public UndoManager Undoer
419
491
 
420
492
                                        if (tag_start.Tag is NoteTag) {
421
493
                                                ((NoteTag) tag_start.Tag).Read (xml, true);
422
 
                                                if (((NoteTag) tag_start.Tag).Image != null) {
423
 
                                                        offset++;
424
 
                                                }
425
494
                                        }
426
495
 
427
496
                                        stack.Push (tag_start);