Skip to content

Commit

Permalink
Revised documentation files for version 0.3
Browse files Browse the repository at this point in the history
  • Loading branch information
dm0- committed Jul 10, 2012
1 parent ea217aa commit 171b532
Show file tree
Hide file tree
Showing 6 changed files with 204 additions and 62 deletions.
2 changes: 1 addition & 1 deletion AUTHORS
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
David Michael <fedora.dm0@gmail.com>
All files included in Window Merge versions 0.1 to 0.2
All files included in Window Merge versions 0.1 to 0.3
40 changes: 13 additions & 27 deletions BUGS
Original file line number Diff line number Diff line change
Expand Up @@ -8,56 +8,42 @@ The issues outlined below are all the problems I have encountered in my own
extremely limited testing of this plugin. This file also serves as a to-do
list for myself with some methods to consider for fixing the problems.

For a listing of theoretical issues that other GTK plugins could experience due
to this plugin, grep the C files for "FRAGILE". These comments identify points
where some assumptions were made about the GTK widget structure. For example,
the Buddy List menu bar has no explicit pointer in the structure, so it is
assumed to be the first child element of main_vbox, but another plugin could
have changed its location.

This file was last revised for distribution with version 0.2.
This file was last revised for distribution with version 0.3.


The following is the list of known issues with the plugin, sorted approximately
from most troublesome to least.

* There are a few ways to cause Pidgin to segfault from messing with the dummy
conversation's tab (dragging it into itself, etc.). This is mostly because
the conversation UI doesn't have an active_conv.

- Ideally, get the PIDGIN_CONVERSATION(PurpleConversation) macro to return
NULL when given NULL in the mainline Pidgin code, and add any other
necessary sanity checks in their gtkconv.c callback functions.
the conversation UI doesn't have an active_conv, which some functions use.

- Trying to fake the active_conv would cause all sorts of other troubles that
are circumvented by setting it to NULL. Still, it's on the radar.
are circumvented by setting it to NULL.

- Intercepting GTK events attempting to modify the dummy page is a possible
- Intercepting any GTK events interacting with the dummy tab is a possible
solution, but it will require a slew of callbacks to cancel user actions.

I imagine most users will have the tab positions at the top which will hide
them automatically when there is only one conversation, avoiding this issue.

* Now that I've taken the time to attempt to run the plugin on Windows, there
seem to be issues related to disabling the plugin. Widgets aren't redrawn
correctly, etc. The issues seem to disappear if the plugin is re-enabled. I
am not quite certain where to begin with these problems, as they do not exist
on GNU/Linux systems.
+ Pidgin ticket #15062 has a patch to allow safely reordering the dummy tab.

* Several cursor movement key bindings were disabled on HTML fields. This was
done in order to enable tab switching and message retrieval, since the Buddy
List has an event handler that stops events which have a binding defined on a
focused HTML widget.
List window has an event handler that stops events which have a binding
defined on a focused HTML widget.

- An alternative to skipping bindings would be to completely remove the Buddy
List event handler, but that would cause other issues. (Control+B for bold
text input would instead activate the "Add Buddy" dialogue, for example.)

- The related functions in Pidgin are all static, so I can't call them from a
wrapper function. The code in question could be duplicated, but I am very
much against plugins duplicating any part of the main project's code. It
seems the only feasible action is to file an issue in the Pidgin tracker.
much against plugins duplicating any part of the main project's code.

* The buddy icon in the status box is positioned from the left of the window,
based on the Buddy List's width. This causes it to be drawn over the pane of
conversations when using the "left" position preference.

* The buddy icon in the Buddy List seems to calculate its position using the
width of the notebook and the position of the window. This causes it to be
drawn in odd locations when using the "left" position preference.
+ Pidgin ticket #15046 has a patch to correct this.
134 changes: 124 additions & 10 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,25 +1,139 @@
2012-07-10 David Michael <fedora.dm0@gmail.com>

Updated project distribution, version 0.3

2012-07-06 David Michael <fedora.dm0@gmail.com>

* merge.c (pwm_split_conversation): Conditionally display the window.

* merge.c (pwm_merge_conversation): Simplify registering accelerators.
(pwm_split_conversation): Simplify unregistering accelerators.

2012-05-31 David Michael <fedora.dm0@gmail.com>

* utils.c (pwm_widget_replace): Initialize a boolean to stop a warning.

2012-05-30 David Michael <fedora.dm0@gmail.com>

* merge.c (focus_in_event_cb): Add this handler to synthesize events.
(pwm_merge_conversation): Start simulating focus to the hidden window.
(pwm_split_conversation): Stop simulating focus to the hidden window.

* merge.c: pwm_destroy_conversation -> pwm_split_conversation
(pwm_merge_conversation): Store the conversations' GtkWindow for later.
(pwm_split_conversation): Restore the window instead of destroying it.
(pwm_create_paned_layout): Create a placeholder for the conversations.
* plugin.c (plugin_unload): Use the new function name.
* window_merge.h: Update the function's prototype.

* utils.c (pwm_widget_replace): Add a widget replacement function.
* window_merge.h: Define its prototype.
* merge.c (pwm_destroy_conversation): Replace (not reparent) notebooks.
(pwm_create_paned_layout): Use replacement for constructing the panes.

* dummy.c (pwm_free_dummy_conversation): Remove the dummy tab first.

* utils.c (pwm_store, pwm_fetch, pwm_clear, pwm_free, pwm_destroy):
Remove these function definitions entirely.
* window_merge.h: Remove the above functions' prototypes.
(pwm_store, pwm_fetch, pwm_clear): Define new convenience macros.
* merge.c: Remove prefixes from pointer names, and handle freeing.
* plugin.c: Likewise.
* dummy.c: Likewise.

2012-05-29 David Michael <fedora.dm0@gmail.com>

* dummy.c: pwm_new_dummy_conversation -> pwm_init_dummy_conversation
(pwm_init_dummy_conversation): Hide the dummy struct from callers.
* merge.c (pwm_merge_conversation): Use the new function name and type.
* window_merge.h: Update the function's prototype.

* plugin.c (conv_placement_by_blist): Try "last" placement if disabled.

2012-05-08 David Michael <fedora.dm0@gmail.com>

* merge.c (pwm_merge_conversation): Use menutray's parent for menu bar.

2012-05-07 David Michael <fedora.dm0@gmail.com>

* merge.c (notify_position_cb, notify_max_position_cb):
Use the signal data pointers instead of g_object_get_data.
(notify_max_position_cb, pwm_create_paned_layout):
Switch to g_object_connect and set the signal data pointers.
(pwm_create_paned_layout): Remove g_object_set_data on the panes.

* merge.c (notify_position_cb, notify_max_position_cb):
Determine slider position based on Buddy List size instead of convs.

* window_merge.h: Add global definitions for user-visible strings.
* plugin.h: Remove global definitions for user-visible strings.

2012-04-29 David Michael <fedora.dm0@gmail.com>

* dummy.c (pwm_new_dummy_conversation): Zero-fill the dummy's struct.

2012-04-19 David Michael <fedora.dm0@gmail.com>

* plugin.c (plugin_init) [ENABLE_NLS]: Initialize the text domain.

* plugin.h: Add TRANSLATORS comments for documenting the POT file.
* plugin.c: Likewise.
* dummy.c: Likewise.

* plugin.h: Remove most strings' configure-dependence for xgettext.
* plugin.c (info): Adjust the struct to mark strings for translation.
(plugin_init): Translate plugin property strings.
(plugin_load): Use the prefixed preference name string.
(get_plugin_pref_frame): Refactor strings to allow translator comments.
* dummy.c (pwm_new_dummy_conversation): Switch to a formatted string.
(pwm_show_dummy_conversation): Use the new prefixed name string.

* plugin.h: Centralize i18n includes and CPP definitions.
* plugin.c: Remove unnecessary i18n include.
* dummy.c: Likewise.

* plugin.h: Define a separate identifier for each preference.
* plugin.c (plugin_init): Initialize all preferences with new labels.
(plugin_load): Use the new layout pref label for connecting the signal.
(get_plugin_pref_frame): Use the layout label in the preferences frame.
* merge.c (pwm_merge_conversation): Use the new layout pref label.
(notify_position_cb, notify_max_position_cb): Use new size pref labels.

2012-04-13 David Michael <fedora.dm0@gmail.com>

* dummy.c (pwm_show_dummy_conversation): Add a tab label and icon.

2012-04-06 David Michael <fedora.dm0@gmail.com>

* merge.c (pwm_merge_conversation): Reorder the menutray widget.

2012-03-28 David Michael <fedora.dm0@gmail.com>

* merge.c (pwm_create_paned_layout): Set "resize" child properties.

2012-03-26 David Michael <fedora.dm0@gmail.com>

* : Updated project distribution, 0.2
Updated project distribution, version 0.2

* merge.c (pwm_merge_conversation): Add conversation menu accel_groups
(pwm_destroy_conversation): Remove the accel_groups when finished
* merge.c (pwm_merge_conversation): Add conversation menu accel_groups.
(pwm_destroy_conversation): Remove the accel_groups when finished.

2012-03-24 David Michael <fedora.dm0@gmail.com>

* merge.c (pwm_destroy_conversation,pwm_set_conv_menus_visible):
Added or rearranged some variables for uniformity in the file
(pwm_destroy_conversation): Replace Buddy List conversations on disable
* merge.c (pwm_destroy_conversation, pwm_set_conv_menus_visible):
Added or rearranged some variables for uniformity in the file.

* merge.c (pwm_destroy_conversation): Spare conversations on disable.

2012-03-23 David Michael <fedora.dm0@gmail.com>

* merge.c (pwm_merge_conversation): Skip some "move-cursor" bindings
* merge.c (pwm_merge_conversation): Skip some "move-cursor" bindings.

2012-03-22 David Michael <fedora.dm0@gmail.com>

* merge.c (pwm_destroy_conversation): Unset window icons
* plugin.c (deleting_conversation_cb): Unset window icons
* merge.c (pwm_destroy_conversation): Unset window icons.
* plugin.c (deleting_conversation_cb): Unset window icons.

2012-03-16 David Michael <fedora.dm0@gmail.com>

* : Initial project distribution, 0.1
Initial project distribution, version 0.1
31 changes: 28 additions & 3 deletions NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,42 @@ This file outlines broad user interface changes. For a list of more specific
code modifications, see the ChangeLog file. For newly discovered problems with
the software, see the BUGS file.


* Updated Distribution of Window Merge 0.3

** Plugin preferences

*** If the conversation placement preference was set to "Buddy List window" and
the plugin was then disabled, it will use the "Last created window" option.

** Buddy List window

*** When the plugin is disabled, the Buddy List and conversation panes are now
split into two independent windows (instead of closing and replacing).

*** A label and icon have been added to the placeholder tab.

*** The Buddy List pane should now remain at a fixed size when resizing the
window, even when it is the right or bottom pane. I.e. the conversation
pane should always be resized with the window.

*** The notification icon in the menu bar has been reordered to remain right-
justified. This also makes the conversation menu items appear adjacent to
the Buddy List items.

*** Message notifications are now cleared when the Buddy List is focused.


* Updated Distribution of Window Merge 0.2

** Buddy List window

*** The window icon list will be unset when conversations are cloesd or the
*** The window icon list will be unset when conversations are closed or the
plugin is disabled. This will cause the window to display the default icon
of the application, which is what the Buddy List normally displays.

*** Several key events are now properly handled, including message retrieval
and conversation menu accelerators.
*** Several conversation keyboard events are now properly handled, including
message retrieval and menu accelerators.

*** When disabling the plugin, conversations open in the Buddy List window will
be run through conversation placement so they are not lost.
Expand Down
35 changes: 21 additions & 14 deletions README
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ though package names such as "pidgin-window_merge" may be used, this plugin was
not written and is not maintained by Pidgin developers. The plugin should be
considered unsupported and unstable for the time being.

This file was last revised for distribution with version 0.2.
This file was last revised for distribution with version 0.3.


PLUGIN OVERVIEW
Expand All @@ -27,9 +27,9 @@ conversation placement preference that allows new conversations to be opened in
the Buddy List by default.

Please note that this plugin works by altering internal Pidgin data structures
in ways that were not intended by the Pidgin developers, and at this point, it
has received extremely limited testing. For these reasons, this plugin should
not be enabled in situations where receiving instant messages is critical.
in ways that were not intended by the Pidgin developers. For this reason, this
plugin should not be enabled in situations where receiving instant messages is
critical.


DOCUMENTATION / PROJECT HISTORY
Expand Down Expand Up @@ -67,16 +67,23 @@ necessary to build the plugin (run from this file's source directory):
./configure
make

You can specify the libdir variable and run "make install" if desired, but the
plugin consists of only one file. It should have been built at the location
".libs/window_merge.so", and you will probably want to copy it to your user-
specific plugin directory "~/.purple/plugins/". On a modern GNU/Linux system:
If successful, the plugin should have been built at ".libs/window_merge.so".
This command will install the plugin for your own account:

install -Dpm 755 .libs/window_merge.so ~/.purple/plugins/window_merge.so
make install plugindir=~/.purple/plugins

Note that if configure specified to compile the project with MinGW, the output
file would be ".libs/window_merge.dll". This file can be placed either in the
"Application Data\.purple\plugins" or the "AppData\.purple\plugins" folder in
your home directory, depending on your version of Microsoft Windows.
Alternatively, run the following as root to install the plugin for all users:

More detailed build information can be found in the INSTALL file.
make install

More information about build commands can be found in the INSTALL file.

Note that if configure specified to compile the project for Microsoft Windows
with MinGW, the output file would be ".libs/window_merge.dll".

This file can be placed in the folder "%AppData%\.purple\plugins" to install it
for your own account. (Create the "plugins" folder if it doesn't exist; enter
"%AppData%\.purple" directly into the Explorer address bar to find it.)

To install it for all users, place "window_merge.dll" in the "plugins" folder
found at Pidgin's installation location.
24 changes: 17 additions & 7 deletions TODO
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,28 @@ This file outlines a few ideas to implement or areas with room for improvement
in the plugin. These items are not necessarily problems to be addressed; for
those, see the BUGS file.

This file was last revised for distribution with version 0.2.
This file was last revised for distribution with version 0.3.


In no particular order, the following are a few nice-to-have changes (maybe):

* The plugin theoretically supports multiple Buddy Lists (more or less), but
Pidgin itself seems to be lacking in this regard.
* Generalize the dummy conversation file so it is as independent of this plugin
as possible. While the dummy makes Pidgin a bit more volatile for intrepid
users, I've found it to be quite handy in using conversation notebooks almost
as if they were geniune GtkWidgets. This has helped in my experimenting with
other plugins that attach conversation areas all over the place. The next
item can be considered a milestone for this one.

* Switch to GTK signals for handling the dummy conversation instead of using
Pidgin's signals. Pidgin/purple signals just don't cover all of the possible
scenarios thoroughly. The GtkNotebook page add/remove signals are a much
more efficient and rigorous solution. However, there are a handful of new
issues needing to be addressed in the transition.

Should the time come when an interface is added for managing multiple Buddy
Lists, the preferences of this plugin will likely change to be the default
settings of new windows. Perhaps a new sub-menu could be added to choose the
panes' orientation or whether to display panes at all on a given Buddy List.
* The plugin theoretically supports multiple Buddy Lists (more or less), but
Pidgin itself seems to be lacking in this regard. If Pidgin ever properly
supports multiple Buddy Lists, this plugin should provide an interface to
manage them independently. A submenu on the menu bar seems simple enough.

* Find ways to properly handle code labeled with "XXX" comments. They are bits
of code that just seem wrong for some reason or another. Unfortunately, most
Expand Down

0 comments on commit 171b532

Please sign in to comment.