pidgin/pidgin

Fix incompatible type conversion errors
release-2.x.y
4 months ago, Elliott Sales de Andrade
488055ab5531
Fix incompatible type conversion errors

- A recent libxml2 changed its handler function to take a `const` pointer. It's
safe for us to have it, and them not, but the opposite way causes an implicit
cast warning.
- In relatively new GLib (many years now), `g_object_ref` casts its output to
match its input. This means we should not be casting to `G_OBJECT`, as that
is not the type it expects, and would translate to the output being `GObject`
instead of the original type.

This fixes the build in Fedora 40, which changes several incompatible pointer
conversion warnings into errors.

This patch is partially from the Fedora maintainer @yarda, with some corrections by me (to the `g_object_ref` portions.)

Testing Done:
Compiled in a Rawhide environment with this patch applied.

Bugs closed: PIDGIN-17850

Reviewed at https://reviews.imfreedom.org/r/2944/
#!/usr/bin/env python
# This is a simple purple notification server.
# It shows notifications when your buddy signs on or you get an IM message.
#
# This script requires Python 2.4 and PyGTK bindings
#
# Note that all function names are resolved dynamically, no
# purple-specific library is needed.
from __future__ import absolute_import, division, print_function
import dbus
import dbus.glib
import dbus.decorators
import gobject
import os
def ensureimconversation(conversation, account, name):
if conversation != 0:
return conversation
else:
# 1 = PURPLE_CONV_IM
return purple.PurpleConversationNew(1, account, name)
def receivedimmsg(account, name, message, conversation, flags):
buddy = purple.PurpleFindBuddy(account, name)
if buddy != 0:
alias = purple.PurpleBuddyGetAlias(buddy)
else:
alias = name
text = "%s says %s" % (alias, message)
code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
"'So what?','Show me',Close,Abuse", text)
if code == 101: # so what?
pass
else:
conversation = ensureimconversation(conversation, account, name)
if code == 102: # show me
window = purple.PurpleConversationGetWindow(conversation)
purple.PurpleConvWindowRaise(window)
if code == 103: # close
purple.PurpleConversationDestroy(conversation)
if code == 104: # abuse
im = purple.PurpleConversationGetImData(conversation)
purple.PurpleConvImSend(im, "Go away you f...")
def buddysignedon(buddyid):
alias = purple.PurpleBuddyGetAlias(buddyid)
text = "%s is online" % alias
code = os.spawnlp(os.P_WAIT, "xmessage", "xmessage", "-buttons",
"'So what?','Let's talk'", text)
if code == 101: # so what?
pass
if code == 102: # talk
name = purple.PurpleBuddyGetName(buddyid)
account = purple.PurpleBuddyGetAccount(buddyid)
purple.PurpleConversationNew(1, account, name)
bus = dbus.SessionBus()
obj = bus.get_object("im.pidgin.purple.PurpleService", "/im/pidgin/purple/PurpleObject")
purple = dbus.Interface(obj, "im.pidgin.purple.PurpleInterface")
bus.add_signal_receiver(receivedimmsg,
dbus_interface = "im.pidgin.purple.PurpleInterface",
signal_name = "ReceivedImMsg")
bus.add_signal_receiver(buddysignedon,
dbus_interface = "im.pidgin.purple.PurpleInterface",
signal_name = "BuddySignedOn")
print("This is a simple purple notification server.")
print("It shows notifications when your buddy signs on or you get an "
"IM message.")
loop = gobject.MainLoop()
loop.run()